作者ENEP (Moo)
看板Python
标题Re: [问题] python multiProcess效能很差?
时间Sun May 17 20:03:19 2015
先看code:
不负责任 没有测试过
https://gist.github.com/Jackmoo/6f482b808aca64eb2285
上面各位说法非常中肯
没有完整code, data, 我只能大略猜想你要干嘛
我只能说这份code以你贴出来的范围来看几乎可以说是没人可以维护的code
而且加上multiprocessing之後会更惨
===========================================================================
首先我的假设已经写在code最上面 如果content里面有其他东西请自己修改
大略讲解一下我知道的这东西
因为你的第二份code只是少个for loop
我就以那份为主来判断
可能的(?)原始架构图
https://gist.github.com/Jackmoo/651efab31dfb9228b44a
因为不知道那个LogCatcher.index是什麽 就只放上index
看到问题了吗?
每一个最後得到的regex iter loop都会回去改 content[i]
你能确定你所有之後对於这个content加上的string不会影响到後面会发生的regex match?
而且每个key value都会做一次
+----------------------------------------------------------------------+
| 以下所有的code和看法都是在加上的string不会影响regex判断的前提下完成 |
+----------------------------------------------------------------------+
以原本的code如果又加上multiprocess来说
对於每个後面的regex iter loop
可能会发生regex pattern 1 process对content[i]处理时
regex pattrern 2 process也对content[i]处理
就算你可以确保两个process不会同时写入content[i]
一样可能会出现[1][2][1][1][1][2][2]这种状况 而不是[1][1][1][1][1][2][2][2]
然後这串东西还要被之後的process 3 4 5胡搞...
(是不知道你怎麽会有multiprocess会同时去修改一个东西是"大家都这样做"的想法
特别是这个东西还是个主要变数)
上面的code是从每个regex pattern去切process
然後用新的outputContent[i]去存加上一堆东西的原始content[i] + .....
但是却有个问题 刚刚想到的
如果用pool map 最後的结果会是[[outputContent[0], ..],[outputContent[0],...]
的二维list
每一个result[i][0]都带有原始的content资料(c+i1+v1+i2+v2....)
不能直接join 会变成 (c+i1+v1+.....+c+i1+v1+....)
这边就请你自己修改了
请自己比对或是看有什麽其他方法
处理相依性本来就是multiprocessing会遇到的问题
就算不解决这个还是会有其他地方可能有问题
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 59.127.139.58
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Python/M.1431864205.A.632.html
※ 编辑: ENEP (59.127.139.58), 05/17/2015 20:06:07
1F:推 CaptainH: 好心人…但是他一定看不懂 05/17 20:21
2F:→ CaptainH: 只能希望他找本书来看了 05/17 20:22
3F:推 os653: 请问那个原始架构图是用什麽软体画的呀? 05/17 21:54
5F:推 os653: 感谢,以前尝试用手绘,没两下就放弃了,这东西赞呀 05/18 10:54
6F:推 jlhc: 推一个架构图 05/18 11:12