{"id":326079,"date":"2021-02-04T18:10:38","date_gmt":"2021-02-04T10:10:38","guid":{"rendered":"http:\/\/4563.org\/?p=326079"},"modified":"2021-02-04T18:10:38","modified_gmt":"2021-02-04T10:10:38","slug":"%e5%a6%82%e4%bd%95%e4%bc%98%e5%8c%96-python-%e8%ae%a1%e7%ae%97%e8%b6%85%e5%a4%a7%e5%ad%97%e5%85%b8%e7%9a%84%e9%97%ae%e9%a2%98","status":"publish","type":"post","link":"http:\/\/4563.org\/?p=326079","title":{"rendered":"\u5982\u4f55\u4f18\u5316 Python \u8ba1\u7b97\u8d85\u5927\u5b57\u5178\u7684\u95ee\u9898"},"content":{"rendered":"<div>\n<div>\n<div>\n<h1>                  \u5982\u4f55\u4f18\u5316 Python \u8ba1\u7b97\u8d85\u5927\u5b57\u5178\u7684\u95ee\u9898               <\/h1>\n<p> <\/p>\n<div>\n<div> <span>\u8cc7\u6df1\u5927\u4f6c : WilliamHL <\/span>  <span><i><\/i> 2<\/span> <\/div>\n<div> <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div isfirst=\"1\"> <\/p>\n<p>\u76ee\u524d\u9047\u5230\u4e00\u4e2a\u8fd9\u6837\u7684\u95ee\u9898\uff1a \u4ece\u6570\u636e\u5e93\u4e2d\u8bfb\u53d6\u6570\u636e\uff0c\u5b58\u5230\u5b57\u5178\u7684\u5185\u5b58\u4e2d\uff08\u51cf\u5c11\u8bfb\u53d6\u5e26\u6765\u7684\u6027\u80fd\u6d88\u8017\uff09\uff0c \u5b57\u5178\u7684\u952e\u662f int \u7c7b\u578b\uff0c\u5b57\u5178\u7684\u503c\u662f longtext\uff0c\u4e00\u6b21\u8bfb\u53d6\u5927\u6982 200 \u6761\u5de6\u53f3\u7684\u6570\u636e\uff0c\u540e\u7eed\u53ef\u80fd\u4f1a\u8fc7\u5343\u3002 \u8fd9\u4e2a\u5b57\u5178\u8d85\u7ea7\u5927\uff0c\u6d89\u53ca\u5230\u4ee3\u7801\u8fd0\u7b97\u4e2d\u8fd8\u6709\u5176\u4ed6\u8ba1\u7b97\u3001\u5b57\u5178\u7684 copy \u3001\u58f0\u660e\u65b0\u7684 list \u7b49\u7b49\u64cd\u4f5c\uff0c\u4f1a\u5b58\u5728\u591a\u4e2a\u8fd9\u6837\u7684\u6570\u636e\uff0c\u5bfc\u81f4\u865a\u62df\u5185\u5b58\u5cf0\u503c\u98d9\u5347\u5230\u63a5\u8fd1 50GB\uff0cmackbook \u90fd\u662f oom \u3002<\/p>\n<p>\u53ea\u60f3\u5230\u662f\u4e0d\u662f\u53ef\u4ee5\u91c7\u7528 redis \u6765\u4ee3\u66ff\u5b57\u5178\u64cd\u4f5c\uff0c\u51cf\u5c11\u5185\u5b58\u6d88\u8017\uff0c\u4e0d\u77e5\u9053\u8fd8\u6709\u6ca1\u6709\u5176\u4ed6\u65b9\u5f0f\uff0c\u611f\u8c22\u5404\u4f4d v \u53cb~<\/p>\n<\/p><\/div>\n<div> <b>\u5927\u4f6c\u6709\u8a71\u8aaa<\/b> (<span>29<\/span>)        <\/div>\n<div> <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<ul>\n<li data-pid=\"5217685\" data-uid=\"2\">\n<div>\n<div>\n<div> <span>\u8cc7\u6df1\u5927\u4f6c : ml1344677 <\/span>  <\/div>\n<div> <i title=\"\u5f15\u7528\"><\/i>  <span>          <\/span> <\/div>\n<\/p><\/div>\n<div>                                                             \u5982\u679c\u9884\u5148\u77e5\u9053\u5927\u5c0f\u7684\u8bdd\uff0c\u662f\u4e0d\u662f\u53ef\u4ee5\u901a\u8fc7\u91cd\u5199__hash()__\u6765\u505a\u51fa\u5b8c\u7f8e\u54c8\u5e0c                                                            <\/div>\n<\/p><\/div>\n<\/li>\n<li data-pid=\"5217686\" data-uid=\"2\">\n<div>\n<div>\n<div> <span>\u8cc7\u6df1\u5927\u4f6c : TimePPT <\/span>  <\/div>\n<div> <i title=\"\u5f15\u7528\"><\/i>  <span>          <\/span> <\/div>\n<\/p><\/div>\n<div>                                                             \u4e3a\u5565\u4e0d\u76f4\u63a5\u8bfb\u6570\u636e\u5e93\uff0c\u8fd8\u8981\u5b58\u5b57\u5178\u554a                                                            <\/div>\n<\/p><\/div>\n<\/li>\n<li data-pid=\"5217687\" data-uid=\"2\">\n<div>\n<div>\n<div> <span>\u8cc7\u6df1\u5927\u4f6c : linw1995 <\/span>  <\/div>\n<div> <i title=\"\u5f15\u7528\"><\/i>  <span>          <\/span> <\/div>\n<\/p><\/div>\n<div>                                                             \u539f\u59cb\u6570\u636e\u8fc7\u5343\u5c31 50 GB\uff0c\u4e0d\u6392\u67e5\u4e00\u4e0b\u4f1a\u4e0d\u4f1a\u6709\u5185\u5b58\u6cc4\u9732\u7684\u95ee\u9898\uff1f                                                            <\/div>\n<\/p><\/div>\n<\/li>\n<li data-pid=\"5217688\" data-uid=\"2\">\n<div>\n<div>\n<div> <span>\u8cc7\u6df1\u5927\u4f6c : liprais <\/span>  <\/div>\n<div> <i title=\"\u5f15\u7528\"><\/i>  <span>          <\/span> <\/div>\n<\/p><\/div>\n<div>                                                             \u4f60\u80af\u5b9a\u5728\u65b9\u6cd5\u7b7e\u540d\u91cc\u9762\u521d\u59cb\u5316 list \u4e86                                                            <\/div>\n<\/p><\/div>\n<\/li>\n<li data-pid=\"5217689\" data-uid=\"2\">\n<div>\n<div>\n<div> <span>\u8cc7\u6df1\u5927\u4f6c : shuax <\/span>  <\/div>\n<div> <i title=\"\u5f15\u7528\"><\/i>  <span>          <\/span> <\/div>\n<\/p><\/div>\n<div>                                                             200 \u6761\u5c31\u8981 50G\u2026\u2026                                                            <\/div>\n<\/p><\/div>\n<\/li>\n<li data-pid=\"5217690\" data-uid=\"2\">\n<div>\n<div>\n<div> <span>\u8cc7\u6df1\u5927\u4f6c : Wincer <\/span>  <\/div>\n<div> <i title=\"\u5f15\u7528\"><\/i>  <span>          <\/span> <\/div>\n<\/p><\/div>\n<div>                                                             \u8d34\u4ee3\u7801\u5427\uff0c\u770b\u770b\u6709\u4ec0\u4e48\u64cd\u4f5c\u3002200 \u4e2a key \u5360 50g \u5185\u5b58\u662f\u4e0d\u53ef\u80fd\u7684\uff0c\u4e4b\u524d\u5904\u7406\u8fc7 80w \u4e2a key \u7684\u5b57\u5178\uff0c\u5012\u662f\u5360\u7528\u4e86\u51e0\u5341 g \u540e oom \u4e86                                                            <\/div>\n<\/p><\/div>\n<\/li>\n<li data-pid=\"5217691\" data-uid=\"2\">\n<div>\n<div>\n<div> <span>\u8cc7\u6df1\u5927\u4f6c : firefox12 <\/span>  <\/div>\n<div> <i title=\"\u5f15\u7528\"><\/i>  <span>          <\/span> <\/div>\n<\/p><\/div>\n<div>                                                             \u5982\u679c\u4f60\u7684 200 \u6761\u6570\u636e\u6ca1\u6709 50G \u90a3\u5c31\u662f\u4f60\u4ee3\u7801\u95ee\u9898\uff0c \u63d0\u9ad8\u4e0b python \u4ee3\u7801\u6c34\u5e73\u3002 \u4f60\u653e\u5728 redis \u91cc\u4e0d\u89e3\u51b3\u4efb\u4f55\u95ee\u9898\u3002                                                            <\/div>\n<\/p><\/div>\n<\/li>\n<li data-pid=\"5217692\" data-uid=\"2\">\n<div>\n<div>\n<div> <span>\u4e3b<\/span> <span>\u8cc7\u6df1\u5927\u4f6c : WilliamHL <\/span>  <\/div>\n<div> <i title=\"\u5f15\u7528\"><\/i>  <span>          <\/span> <\/div>\n<\/p><\/div>\n<div>                                                             &#8220;` python<\/p>\n<p>#!\/usr\/bin\/env python<br \/># -*- coding: utf-8 -*-<br \/>import os<br \/>import copy<br \/>import json<br \/>import logging<br \/>import pymysql<br \/>import itertools<br \/>import pandas as pd<br \/>import multiprocessing as mp<\/p>\n<p>PWD = os.path.dirname(os.path.realpath(__file__))<br \/>LOGPATH = os.path.join(PWD, &#8216;.\/info.log&#8217;)<br \/>logging.basicConfig(level=logging.INFO,<br \/> format=&#8217;%(asctime)s &#8211; %(filename)s[line:%(lineno)d] &#8211; %(levelname)s: %(message)s&#8217;,<br \/> filename=LOGPATH)<\/p>\n<p>class FuncTactic:<\/p>\n<p> def __init__(self, task_id):<br \/> self.task_id = task_id<\/p>\n<p> def tactic(self):<br \/> case_id_path = &#8220;\/Users\/xxxx\/Downloads\/&#8221; + str(self.task_id) + &#8220;.log&#8221;<br \/> with open(case_id_path, &#8216;r&#8217;, encoding=&#8217;utf-8&#8242;) as content:<br \/> result_list = json.load(content)<br \/> content.close()<br \/> case_id_func = {} # \u8fd9\u4e2a\u662f id \u5bf9\u5e94\u7684\u65b9\u6cd5\u53d8\u66f4<br \/> for i in result_list:<br \/> case_id_func[str(i.get(&#8216;c_id&#8217;))] = i.get(&#8216;c_c_func_origin_list&#8217;)<\/p>\n<p> conn = self.connect_db(&#8220;localhost&#8221;, 3306, &#8220;root&#8221;, &#8220;root1234&#8221;, &#8220;code_trees&#8221;)<br \/> table_name = &#8220;android_code_tree&#8221;<br \/> sql = &#8220;SELECT case_id, trees FROM %s where case_id in (%s)&#8221; % (table_name, str(list(case_id_func.keys()))[<br \/> 1:-1])<br \/> covs_pd = pd.read_sql(sql, conn)<br \/> funcs_dict = {} # \u8fd9\u4e2a\u662f id \u5bf9\u5e94\u7684\u5173\u7cfb\u6811<br \/> for row in covs_pd.itertuples():<br \/> id = int(getattr(row, &#8220;case_id&#8221;))<br \/> funcs = getattr(row, &#8220;trees&#8221;)<br \/> if funcs is None or len(funcs) &lt; 1:<br \/> continue<br \/> else:<br \/> funcs_dict[id] = funcs<br \/> conn.close()<\/p>\n<p> # \u8bfb\u53d6\u6587\u4ef6\u83b7\u53d6\u65b9\u6cd5\u53d8\u66f4\u548c\u5bf9\u5e94\u7684 case<br \/> func_case_id = {} # \u65b9\u6cd5\u5bf9\u5e94\u7684\u53d8\u66f4 id<br \/> conn = self.connect_db(&#8220;x.x.x.x&#8221;, 3306, &#8220;test&#8221;, &#8220;test&#8221;, &#8220;code_ing&#8221;)<br \/> table_name = &#8220;task_diff_case_relation&#8221;<br \/> sql = &#8220;SELECT relation FROM %s where taskid = %s&#8221; % (table_name, self.task_id)<br \/> relation = pd.read_sql(sql, conn)<br \/> functions = &#8220;&#8221;<br \/> for row in relation.itertuples():<br \/> functions = getattr(row, &#8220;relation&#8221;)<br \/> conn.close()<br \/> for i in json.loads(functions):<br \/> func_case_id[i.get(&#8216;diff_code&#8217;)] = i.get(&#8216;caseid_list&#8217;)<br \/> # \u8ba1\u7b97\u57fa\u7c7b\u65b9\u6cd5<br \/> pool = mp.Pool(mp.cpu_count())<br \/> jobs = []<br \/> for _dict in self.split_dict(func_case_id, mp.cpu_count()):<br \/> jobs.append(pool.apply(self.get_dict_common_func, _dict))<\/p>\n<p> res = [job.get() for job in jobs]<br \/> pool.close()<\/p>\n<p> common_funcs = list(itertools.chain(*map(eval, res)))<\/p>\n<p> # \u8fc7\u6ee4<br \/> result_case_id_func = copy.deepcopy(case_id_func)<br \/> flitur_result = {}<br \/> for id, fun_list in case_id_func.items():<br \/> if set(fun_list) &lt; set(common_funcs):<br \/> in_list = []<br \/> for fun in fun_list:<br \/> func_case_id[fun].remove(id)<br \/> if len(func_case_id[fun]) &gt; 0:<br \/> if id in result_case_id_func:<br \/> del result_case_id_func[id]<br \/> in_list.append(fun)<br \/> flitur_result[id] = in_list<br \/> print(result_case_id_func)<br \/> print(flitur_result)<br \/> logging.info(str(result_case_id_func.keys()))<br \/> logging.info(str(flitur_result.keys()))<br \/> print(<br \/> len(list(flitur_result.keys())) \/ (len(list(flitur_result.keys())) + len(list(result_case_id_func.keys()))))<\/p>\n<p> def connect_db(self, host, port, user, passwd, db):<br \/> try:<br \/> conn = pymysql.connect(host=host, port=port, user=user, passwd=passwd, db=db)<br \/> return conn<br \/> except Exception as e:<br \/> logging.error(&#8220;connect db error : &#8221; + str(e))<br \/> return None<\/p>\n<p> def get_dict_common_func(self, _dict):<br \/> common_funcs = []<br \/> for fun, ids in _dict.items():<br \/> if len(_dict[fun]) &gt;= 40:<br \/> common_funcs.append(fun)<br \/> continue<br \/> else:<br \/> in_list = [self.get_funcs_lines_from_tree(_dict[int(x)], fun) for x in ids]<br \/> if len(in_list) &gt; 100:<br \/> common_funcs.append(fun)<br \/> continue<\/p>\n<p> return common_funcs<\/p>\n<p> def get_funcs_lines_from_tree(self, tree_string, func):<br \/> data = tree_string.split(&#8220;n&#8221;)<br \/> index_list = [data.index(i) for i in data if func in i]<\/p>\n<p> result_list = []<br \/> for i in index_list:<br \/> list_in = [data[i].split(&#8221; &#8220;)[-1].lstrip(&#8220;L&#8221;)]<br \/> prefix = self.rreplace(data[i].split(&#8220;L&#8221;)[0], &#8220;| &#8220;, &#8220;&#8221;)<\/p>\n<p> for j in data[0:i][::-1]:<br \/> if prefix in j:<br \/> # print(&#8220;old new_prefix: &#8220;, prefix)<br \/> prefix = self.rreplace(prefix, &#8220;| &#8220;, &#8220;&#8221;)<br \/> # print(&#8220;\u65b0\u5efa new_prefix: &#8220;, prefix)<br \/> list_in.append(j.split(&#8221; &#8220;)[-1].lstrip(&#8220;L&#8221;))<br \/> continue<br \/> else:<br \/> pass<\/p>\n<p> # \u67e5\u627e\u5b8c\u6210\u6240\u6709\u7684\u524d\u5411\u8c03\u7528\uff0c\u4e4b\u540e\u67e5\u627e\u540e\u5411\u8c03\u7528,\u5148\u8fd8\u539f prefxi<br \/> prefix = self.rreplace(data[i].split(&#8220;L&#8221;)[0], &#8220;| &#8220;, &#8220;| | &#8220;)<br \/> list_in = list_in[::-1]<br \/> for j in data[i:]:<br \/> if prefix in j:<br \/> prefix = self.rreplace(prefix, &#8220;| &#8220;, &#8220;| | &#8220;)<br \/> list_in.append(j.split(&#8221; &#8220;)[-1].lstrip(&#8220;L&#8221;))<br \/> continue<br \/> else:<br \/> pass<br \/> if len(list_in) &gt; 0:<br \/> result_list.append(list_in)<\/p>\n<p> if len(result_list) &gt; 0:<br \/> return result_list<br \/> else:<br \/> return<\/p>\n<p> def rreplace(self, s, old, new):<br \/> li = s.rsplit(old, 1)<br \/> return new.join(li)<\/p>\n<p> def split_dict(self, x, chunks):<br \/> i = itertools.cycle(range(chunks))<br \/> split = [dict() for _ in range(chunks)]<br \/> for k, v in x.items():<br \/> split[next(i)][k] = v<br \/> return split<\/p>\n<p>if __name__ == &#8220;__main__&#8221;:<br \/> fun = FuncTactic(993)<br \/> fun.tactic()<\/p>\n<p>&#8220;`                                                            <\/div>\n<\/p><\/div>\n<\/li>\n<li data-pid=\"5217693\" data-uid=\"2\">\n<div>\n<div>\n<div> <span>\u4e3b<\/span> <span>\u8cc7\u6df1\u5927\u4f6c : WilliamHL <\/span>  <\/div>\n<div> <i title=\"\u5f15\u7528\"><\/i>  <span>          <\/span> <\/div>\n<\/p><\/div>\n<div>                                                             @Wincer \u5728 8 \u8d34\u4e86\u4e00\u4e0b\u4ee3\u7801                                                            <\/div>\n<\/p><\/div>\n<\/li>\n<li data-pid=\"5217694\" data-uid=\"2\">\n<div>\n<div>\n<div> <span>\u4e3b<\/span> <span>\u8cc7\u6df1\u5927\u4f6c : WilliamHL <\/span>  <\/div>\n<div> <i title=\"\u5f15\u7528\"><\/i>  <span>          <\/span> <\/div>\n<\/p><\/div>\n<div>                                                             @TimePPT \u89c9\u5f97\u6765\u56de\u8bfb\u5199\u6d88\u8017\u6027\u80fd                                                            <\/div>\n<\/p><\/div>\n<\/li>\n<li data-pid=\"5217695\" data-uid=\"2\">\n<div>\n<div>\n<div> <span>\u4e3b<\/span> <span>\u8cc7\u6df1\u5927\u4f6c : WilliamHL <\/span>  <\/div>\n<div> <i title=\"\u5f15\u7528\"><\/i>  <span>          <\/span> <\/div>\n<\/p><\/div>\n<div>                                                             @linw1995 \u611f\u8c22\u554a\uff0c\u5468\u672b\u6392\u67e5\u4e00\u4e0b                                                            <\/div>\n<\/p><\/div>\n<\/li>\n<li data-pid=\"5217696\" data-uid=\"2\">\n<div>\n<div>\n<div> <span>\u8cc7\u6df1\u5927\u4f6c : laqow <\/span>  <\/div>\n<div> <i title=\"\u5f15\u7528\"><\/i>  <span>          <\/span> <\/div>\n<\/p><\/div>\n<div>                                                             \u4f1a\u4e0d\u4f1a\u662f mp.Pool \u91cc\u6bcf\u4e2a\u7ebf\u7a0b\u590d\u5236\u4e86\u4e00\u4efd\u5b57\u5178                                                            <\/div>\n<\/p><\/div>\n<\/li>\n<li data-pid=\"5217697\" data-uid=\"2\">\n<div>\n<div>\n<div> <span>\u4e3b<\/span> <span>\u8cc7\u6df1\u5927\u4f6c : WilliamHL <\/span>  <\/div>\n<div> <i title=\"\u5f15\u7528\"><\/i>  <span>          <\/span> <\/div>\n<\/p><\/div>\n<div>                                                             @laqow Pool \u662f\u6211\u65b0\u66f4\u65b0\u7684\uff0c\u4e4b\u524d\u662f\u5355\u8fdb\u7a0b\u7684                                                            <\/div>\n<\/p><\/div>\n<\/li>\n<li data-pid=\"5217698\" data-uid=\"2\">\n<div>\n<div>\n<div> <span>\u4e3b<\/span> <span>\u8cc7\u6df1\u5927\u4f6c : WilliamHL <\/span>  <\/div>\n<div> <i title=\"\u5f15\u7528\"><\/i>  <span>          <\/span> <\/div>\n<\/p><\/div>\n<div>                                                             @laqow \u4f60\u7adf\u7136\u80fd\u770b\u61c2\uff0c\u6211\u8fd8\u6ca1\u6392\u7248                                                            <\/div>\n<\/p><\/div>\n<\/li>\n<li data-pid=\"5217699\" data-uid=\"2\">\n<div>\n<div>\n<div> <span>\u8cc7\u6df1\u5927\u4f6c : skinny <\/span>  <\/div>\n<div> <i title=\"\u5f15\u7528\"><\/i>  <span>          <\/span> <\/div>\n<\/p><\/div>\n<div>                                                             \u5982\u679c\u4f60\u7684\u4ee3\u7801\u6ca1\u95ee\u9898\uff0c\u6570\u636e\u786e\u5b9e\u5f88\u591a\uff0c\u4ee5\u6211\u6709\u9650\u7684\u6570\u636e\u5904\u7406\u7ecf\u9a8c\u5efa\u8bae\u4f60\u4e0d\u8981\u5728 python \u7684\u57fa\u7840\u6570\u636e\u7ed3\u6784\u91cc\u4fdd\u5b58\u592a\u591a\u6570\u636e\uff0c\u5185\u5b58\u4f1a\u7206\u70b8\u7684\uff0c\u5360\u7528\u7684\u5185\u5b58\u4f1a\u8fdc\u8fdc\u8d85\u8fc7\u4f60\u7684\u9884\u671f\uff08\u6211\u9047\u5230\u7684\u662f\u5185\u5b58\u5360\u7528\u5341\u500d\u8d77\u6b65\uff09\u3002                                                            <\/div>\n<\/p><\/div>\n<\/li>\n<li data-pid=\"5217700\" data-uid=\"2\">\n<div>\n<div>\n<div> <span>\u4e3b<\/span> <span>\u8cc7\u6df1\u5927\u4f6c : WilliamHL <\/span>  <\/div>\n<div> <i title=\"\u5f15\u7528\"><\/i>  <span>          <\/span> <\/div>\n<\/p><\/div>\n<div>                                                             @skinny \u8003\u8651\u8fc7\u91c7\u7528 array \u5b9e\u73b0\uff0c\u7a0d\u5fae\u770b\u4e86\u4e0b\u8c8c\u4f3c\u80fd\u964d\u4f4e\u5185\u5b58\u5360\u7528                                                            <\/div>\n<\/p><\/div>\n<\/li>\n<li data-pid=\"5217701\" data-uid=\"2\">\n<div>\n<div>\n<div> <span>\u8cc7\u6df1\u5927\u4f6c : laqow <\/span>  <\/div>\n<div> <i title=\"\u5f15\u7528\"><\/i>  <span>          <\/span> <\/div>\n<\/p><\/div>\n<div>                                                             @WilliamHL \u592a\u957f\u4e86\u770b\u4e0d\u61c2\uff0c\u731c\u7684\uff0c\u9047\u5230\u8fc7\u8fd9\u4e2a\u5f15\u8d77\u7684\u95ee\u9898                                                            <\/div>\n<\/p><\/div>\n<\/li>\n<li data-pid=\"5217702\" data-uid=\"2\">\n<div>\n<div>\n<div> <span>\u8cc7\u6df1\u5927\u4f6c : DoctorCat <\/span>  <\/div>\n<div> <i title=\"\u5f15\u7528\"><\/i>  <span>          <\/span> <\/div>\n<\/p><\/div>\n<div>                                                             Linux \u4e0b\u8fdb\u7a0b\u6808\u7684\u9ed8\u8ba4\u5927\u5c0f\u662f 10MB\uff0c\u8fdb\u7a0b\u662f\u4e0d\u662f\u590d\u5236\u592a\u591a\u4e86\u6ca1\u6709\u9000\u51fa\u5de5\u4f5c\u8fdb\u7a0b\uff1f\u770b\u770b\u8fdb\u7a0b\u6811\u60c5\u51b5\uff0c\u8bd5\u8bd5 close \u540e join \u7b49\u5f85\u8fdb\u7a0b\u7ed3\u675f\u3002\u4e0d\u7136\u4f1a\u4ea7\u751f\u5f88\u591a\u50f5\u5c38\u8fdb\u7a0b\u3002                                                            <\/div>\n<\/p><\/div>\n<\/li>\n<li data-pid=\"5217703\" data-uid=\"2\">\n<div>\n<div>\n<div> <span>\u8cc7\u6df1\u5927\u4f6c : todd7zhang <\/span>  <\/div>\n<div> <i title=\"\u5f15\u7528\"><\/i>  <span>          <\/span> <\/div>\n<\/p><\/div>\n<div>                                                             \u53ea\u80fd\u731c\u662f\u4f60\u7684 longtext \u5904\u7406\u7684\u65f6\u5019\u9020\u51fa\u592a\u591a\u7684\u65b0\u7684 str \u4e86                                                            <\/div>\n<\/p><\/div>\n<\/li>\n<li data-pid=\"5217704\" data-uid=\"2\">\n<div>\n<div>\n<div> <span>\u8cc7\u6df1\u5927\u4f6c : Wincer <\/span>  <\/div>\n<div> <i title=\"\u5f15\u7528\"><\/i>  <span>          <\/span> <\/div>\n<\/p><\/div>\n<div>                                                             get_funcs_lines_from_tree \u91cc\u9762\u6709\u592a\u591a\u9488\u5bf9\u5b57\u7b26\u4e32\u7684\u5207\u7247\u64cd\u4f5c\u4e86\uff0cPython \u6bcf\u4e00\u6b21\u5bf9\u5b57\u7b26\u4e32\u7684\u5207\u7247\u90fd\u4f1a\u5185\u5b58\u590d\u5236\u3002\u6309\u7167\u4f60\u7684\u8bf4\u6cd5\u5982\u679c\u8fd9\u4e2a\u5b57\u7b26\u4e32\u5f88\u957f\u5f88\u957f\u7684\u8bdd\uff0c\u786e\u5b9e\u4f1a\u9020\u6210\u5185\u5b58\u7684\u98d9\u5347                                                            <\/div>\n<\/p><\/div>\n<\/li>\n<li data-pid=\"5217705\" data-uid=\"2\">\n<div>\n<div>\n<div> <span>\u4e3b<\/span> <span>\u8cc7\u6df1\u5927\u4f6c : WilliamHL <\/span>  <\/div>\n<div> <i title=\"\u5f15\u7528\"><\/i>  <span>          <\/span> <\/div>\n<\/p><\/div>\n<div>                                                             @DoctorCat \u5927\u6982\u5c31\u662f 19 \u548c 20 \u63d0\u5230\u7684\u95ee\u9898\uff0cvalue \u8ba1\u7b97\u4e86\u5f88\u591a\u4e2d\u95f4\u5c42\u7684 list \u548c str \u9020\u6210\u7684\uff0c\u4f46\u662f\u76ee\u524d\u8fd9\u4e9b\u90fd\u662f\u9700\u8981\u8fdb\u884c\u7684\u4e2d\u95f4\u5c42\u8ba1\u7b97\uff0c\u6682\u65f6\u6ca1\u6709\u60f3\u5230\u597d\u7684\u529e\u6cd5                                                            <\/div>\n<\/p><\/div>\n<\/li>\n<li data-pid=\"5217706\" data-uid=\"2\">\n<div>\n<div>\n<div> <span>\u4e3b<\/span> <span>\u8cc7\u6df1\u5927\u4f6c : WilliamHL <\/span>  <\/div>\n<div> <i title=\"\u5f15\u7528\"><\/i>  <span>          <\/span> <\/div>\n<\/p><\/div>\n<div>                                                             @Wincer \u662f\u8fd9\u6837\u7684\u4f46\u662f\u4e0d\u77e5\u9053\u6709\u6ca1\u6709\u4ec0\u4e48\u597d\u7684\u529e\u6cd5\uff0c\u6700\u540e\u574f\u7684\u529e\u6cd5\u5c31\u662f\u8fdb\u884c\u5206\u6b21\u8bfb\u53d6\uff0c\u4f46\u662f\u611f\u89c9\u591a db \u8bfb\u53d6\uff0c\u4f1a\u9020\u6210\u7a0b\u5e8f\u6267\u884c\u65f6\u95f4\u8fc7\u957f                                                            <\/div>\n<\/p><\/div>\n<\/li>\n<li data-pid=\"5217707\" data-uid=\"2\">\n<div>\n<div>\n<div> <span>\u8cc7\u6df1\u5927\u4f6c : DoctorCat <\/span>  <\/div>\n<div> <i title=\"\u5f15\u7528\"><\/i>  <span>          <\/span> <\/div>\n<\/p><\/div>\n<div>                                                             @WilliamHL \u5584\u7528 Del                                                            <\/div>\n<\/p><\/div>\n<\/li>\n<li data-pid=\"5217708\" data-uid=\"2\">\n<div>\n<div>\n<div> <span>\u8cc7\u6df1\u5927\u4f6c : kele1997 <\/span>  <\/div>\n<div> <i title=\"\u5f15\u7528\"><\/i>  <span>          <\/span> <\/div>\n<\/p><\/div>\n<div>                                                             \u4f60\u4f7f\u7528\u7684\u662f\u591a\u8fdb\u7a0b\uff0c\u800c\u4e0d\u662f\u591a\u7ebf\u7a0b\u3002\u591a\u8fdb\u7a0b\u4f20\u53c2\uff0c\u53c2\u6570\u4f1a\u62f7\u8d1d\u5230\u65b0\u7684\u5b50\u8fdb\u7a0b\u4e2d\u3002 <\/p>\n<p>\u4f60\u53ef\u4ee5\u8bd5\u8bd5\u4e0b\u9762\u7684\u4ee3\u7801\uff0c\u4f60\u4f1a\u53d1\u73b0\uff0c\u4e00\u4e2a\u8fdb\u7a0b\u7684\u65f6\u5019\uff0c\u5185\u5b58\u5360\u7528\u5728 400 MB \u5de6\u53f3 <br \/>\u591a\u4e2a\u8fdb\u7a0b\u7684\u65f6\u5019\uff0c\u6bcf\u4e2a\u8fdb\u7a0b\u5360\u7528\u5185\u5b58\u90fd\u5728 400MB \u5de6\u53f3<\/p>\n<p>\u800c\u4e14\u4f7f\u7528\u591a\u8fdb\u7a0b\u6a21\u5757\u65f6\uff0c\u8fd8\u6709\u4e00\u4e2a\u7b49\u5f85\u7684\u4e3b\u8fdb\u7a0b\u6a21\u5757\uff0c\u6240\u4ee5\u4f60\u7684\u53c2\u6570\u62f7\u8d1d\u4e86\u597d\u591a\u6b21\u4e4b\u540e\uff0c\u5185\u5b58\u5c31\u7206\u70b8\u4e86\u3002\u3002<\/p>\n<p>&#8220;`python3<br \/>import time<br \/>from multiprocessing import Process<\/p>\n<p>ll = [i for i in range(10000000)]<\/p>\n<p>def test(ll):<br \/>\u00b7\u00b7\u00b7\u00b7while True:<br \/>\u00b7\u00b7\u00b7\u00b7\u00a6\u00b7\u00b7\u00b7time.sleep(0.1)<\/p>\n<p>p1 = Process(target=test, args=(ll,))<br \/>p1.start()<\/p>\n<p># \u5f00\u7b2c\u4e8c\u4e2a \u6ce8\u91ca\u6389 p1.join<br \/>p1.join()<br \/># \u518d\u5f00\u65b0\u7684\u8fdb\u7a0b<br \/>&#8221;&#8217;<br \/>p2 = Process(target=test, args=(ll,))<br \/>p2.start()<\/p>\n<p>p1.join()<br \/>&#8221;&#8217; <br \/>&#8220;`                                                            <\/div>\n<\/p><\/div>\n<\/li>\n<li data-pid=\"5217709\" data-uid=\"2\">\n<div>\n<div>\n<div> <span>\u8cc7\u6df1\u5927\u4f6c : kele1997 <\/span>  <\/div>\n<div> <i title=\"\u5f15\u7528\"><\/i>  <span>          <\/span> <\/div>\n<\/p><\/div>\n<div>                                                             \u53e6\u5916\u4f60\u53ef\u4ee5\u5c1d\u8bd5\u4f7f\u7528\u4e00\u4e0b pypy \u89e3\u91ca\u5668\uff0c\u5728\u4e0a\u9762\u7684\u4ee3\u7801\u4e2d\uff0c\u4f7f\u7528 cpython \u89e3\u91ca\u5668\u6bcf\u4e2a\u8fdb\u7a0b\u5360\u7528\u5185\u5b58 400MB \u5de6\u53f3\uff0c\u800c\u4f7f\u7528 pypy \u89e3\u91ca\u5668\u53ea\u9700\u8981\u6253\u7ed9\u865a\u62df\u5185\u5b58 200 MB\uff0c\u5b9e\u9645\u7269\u7406\u5360\u7528 140MB !!                                                            <\/div>\n<\/p><\/div>\n<\/li>\n<li data-pid=\"5217710\" data-uid=\"2\">\n<div>\n<div>\n<div> <span>\u4e3b<\/span> <span>\u8cc7\u6df1\u5927\u4f6c : WilliamHL <\/span>  <\/div>\n<div> <i title=\"\u5f15\u7528\"><\/i>  <span>          <\/span> <\/div>\n<\/p><\/div>\n<div>                                                             @DoctorCat \u5c1d\u8bd5\u4e86\u4e00\u4e0b del \u786e\u5b9e\u6bd4 pop \u5360\u7528\u591a\u4e00\u4e9b\u5185\u5b58\u3002\u611f\u89c9\u5cf0\u503c\u5185\u5b58\u8fd8\u662f\u5728\u5207\u7247\u548c\u63a8\u5bfc\u4e0a                                                            <\/div>\n<\/p><\/div>\n<\/li>\n<li data-pid=\"5217711\" data-uid=\"2\">\n<div>\n<div>\n<div> <span>\u4e3b<\/span> <span>\u8cc7\u6df1\u5927\u4f6c : WilliamHL <\/span>  <\/div>\n<div> <i title=\"\u5f15\u7528\"><\/i>  <span>          <\/span> <\/div>\n<\/p><\/div>\n<div>                                                             @kele1997 \u611f\u8c22\uff0c\u6211\u53bb\u5c1d\u8bd5\u4e00\u4e0b\u3002\u591a\u8fdb\u7a0b\u662f\u540e\u6765\u6539\u5199\u7684\uff0c\u8fd8\u6ca1\u6709\u9a8c\u8bc1\uff0c\u6570\u636e\u4e0a\u90fd\u662f\u4e4b\u524d\u5355\u8fdb\u7a0b\u6267\u884c\u51fa\u73b0\u7684                                                            <\/div>\n<\/p><\/div>\n<\/li>\n<li data-pid=\"5217712\" data-uid=\"2\">\n<div>\n<div>\n<div> <span>\u8cc7\u6df1\u5927\u4f6c : kele1997 <\/span>  <\/div>\n<div> <i title=\"\u5f15\u7528\"><\/i>  <span>          <\/span> <\/div>\n<\/p><\/div>\n<div>                                                             \u770b\u5230\u4e0a\u9762\u8fd8\u6709\u8001\u54e5\u8bf4\uff0c\u8bb8\u591a\u4e2d\u95f4\u53d8\u91cf\u4e5f\u5360\u7528\u5185\u5b58\uff0c\u53ef\u4ee5\u4f7f\u7528 DEL \u5220\u9664\u3002\u5176\u5b9e python3 \u7684\u5783\u573e\u56de\u6536\u662f\u5f15\u7528\u5947\u6570\uff0c\u6211\u4eec\u53ef\u4ee5\u628a\u524d\u9762\u7684\u8ba1\u7b97\u90fd\u5305\u88c5\u5230\u51fd\u6570\u4e2d\uff0c\u51fd\u6570\u7684\u4f5c\u7528\u57df\u7ed3\u675f\u4e4b\u540e\uff0c\u51fd\u6570\u5185\u90e8\u7684\u5185\u5b58\u90fd\u4f1a\u56de\u6536\u6389<\/p>\n<p>\u4f8b\u5982\uff0c\u8fd8\u662f\u4e0b\u9762\u7684\u4ee3\u7801\uff0c\u4f7f\u7528\u51fd\u6570\uff0c\u521b\u5efa\u5217\u8868\u4e4b\u540e\uff0c\u4e3b\u8fdb\u7a0b\u53ea\u9700\u8981 10 \u51e0\u5146\u7684\u5185\u5b58\uff0c\u800c\u53ea\u6709\u5de5\u4f5c\u8fdb\u7a0b p1 \u624d\u4f1a\u5360\u7528 400MB \u5185\u5b58<\/p>\n<p>&#8220;`python<br \/>def createlist():<br \/> ll = [i for i in range(10000000)]<br \/> # \u8fd9\u91cc\u53ef\u4ee5\u6dfb\u52a0\u4e00\u4e9b\u4e2d\u95f4\u7ed3\u679c\uff0c\u6bd4\u5982 tmp \u4e4b\u7c7b\u7684\u4e2d\u95f4\u7ed3\u679c\uff0c\u8fd9\u4e9b\u90fd\u4f1a\u56de\u6536\u6389<br \/> tmp = [j for j in range(1111,1111111)]<br \/> return ll<\/p>\n<p>print(gc.isenabled())<\/p>\n<p>def test(ll):<br \/> while True:<br \/> time.sleep(0.1)<\/p>\n<p>p1 = Process(target=test, args=(createlist(),))<br \/>p1.start()<\/p>\n<p>p1.join()<br \/>&#8220;`                                                            <\/div>\n<\/p><\/div>\n<\/li>\n<li data-pid=\"5217713\" data-uid=\"2\">\n<div>\n<div>\n<div> <span>\u8cc7\u6df1\u5927\u4f6c : Wincer <\/span>  <\/div>\n<div> <i title=\"\u5f15\u7528\"><\/i>  <span>          <\/span> <\/div>\n<\/p><\/div>\n<div>                                                             @WilliamHL \u4f7f\u7528 memoryview \u8bd5\u8bd5\u5427\uff0c\u5148\u628a str \u8f6c\u6210 memoryview\uff0c\u8fdb\u884c\u5207\u7247\u64cd\u4f5c\u548c\u4fee\u6539\u64cd\u4f5c\uff0c\u5728\u64cd\u4f5c\u5b8c\u6210\u7684\u65f6\u5019\u518d\u8f6c\u5316\u56de\u6765\u3002                                                            <\/div>\n<\/p><\/div>\n<\/li>\n<li>\n","protected":false},"excerpt":{"rendered":"<p>\u5982\u4f55\u4f18\u5316 Python \u8ba1\u7b97\u8d85\u5927\u5b57&hellip;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[],"tags":[],"_links":{"self":[{"href":"http:\/\/4563.org\/index.php?rest_route=\/wp\/v2\/posts\/326079"}],"collection":[{"href":"http:\/\/4563.org\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/4563.org\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/4563.org\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/4563.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=326079"}],"version-history":[{"count":0,"href":"http:\/\/4563.org\/index.php?rest_route=\/wp\/v2\/posts\/326079\/revisions"}],"wp:attachment":[{"href":"http:\/\/4563.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=326079"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/4563.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=326079"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/4563.org\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=326079"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}