作者ntuleo (里欧)
看板Python
标题Re: [悬赏] python multiProcess 问题解法
时间Thu Apr 30 11:58:21 2015
首先感谢大家的回答,感谢LiloHuang的长文解答
不过我目前还是没有找到好的方法可以加速
试出来的结果都是变慢...
由於这问题实在卡我太久了,希望有人可以帮我想一下解法
如果能成功优化我的程式,我提供500元的奖赏
(太少可以再跟我说,我想对知道的人来说应该不会太花时间)
以下是我尝试(但失败,反而变慢)的程式
if __name__ == "__main__":
content = input_file(target).split("\n")
content = manager.list(content)
for files in source:
obj_grab.append((LogCatcher(files), content))
pool = Pool()
pool.map(transferConcat, obj_grab)
pool.close()
pool.join()
def concatMessage(LogCatcher, content):
for key in LogCatcher.dic_map:
regex = re.compile(key)
for j in range(len(content)):
for m in re.finditer(regex, content[j]):
content[j] += LogCatcher.index + LogCatcher.dic_map[key]
def transferConcat(args):
return concatMessage(*args)
obj_grab是一个list,里面放不同file input产生的LogCatcher(一个自定义的object)
content是我要改的file,用manager()宣告是要让不同process同时修改
我希望可以用并行化加速concatMessage
(我的理解是这样最快,或是有其他更好的方法也可以)
应该以上的资讯就可以分析了
-----------------------------------------------------------------------------
下面是我本来的架构(纯for loop)
if __name__ == "__main__":
content = input_file(target).split("\n")
for files in source:
obj_grab.append((LogCatcher(files)))
content = concatMessage(obj_grab,content)
def concatMessage(obj_grab, content):
for logCatcher in obj_grab:
for key in logCatcher.dic_map:
regex = re.compile(key)
for j in range(len(content)):
for m in re.finditer(regex, content[j]):
content[j] += logCatcher.index + logCatcher.dic_map[key]
return content
麻烦大家帮帮忙了
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 175.98.146.2
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Python/M.1430366304.A.9B3.html
※ 编辑: ntuleo (175.98.146.2), 04/30/2015 11:59:31
1F:推 ug945: 开多个manager.list() 存修改过的资料 最後再合并 04/30 14:15
2F:→ ccwang002: 方便提供测资吗? 04/30 15:32
3F:→ ntuleo: 测资没办法提供抱歉,不过就是读进来的string阿应该都一样 04/30 16:25
4F:嘘 CaptainH: 你还是没搞清楚,你的回圈彼此有相依性,是不能平行化 04/30 19:47
5F:→ CaptainH: 的 04/30 19:47
※ 编辑: ntuleo (60.250.185.98), 05/01/2015 11:55:17