Re: [問題] python multiProcess效能很差?
先看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://www.ptt.cc/bbs/Python/M.1431864205.A.632.html
※ 編輯: ENEP (59.127.139.58), 05/17/2015 20:06:07
推
05/17 20:21, , 1F
05/17 20:21, 1F
→
05/17 20:22, , 2F
05/17 20:22, 2F
推
05/17 21:54, , 3F
05/17 21:54, 3F
→
05/18 09:34, , 4F
05/18 09:34, 4F
推
05/18 10:54, , 5F
05/18 10:54, 5F
推
05/18 11:12, , 6F
05/18 11:12, 6F
推
05/18 19:49, , 7F
05/18 19:49, 7F
討論串 (同標題文章)
完整討論串 (本文為第 4 之 4 篇):
Python 近期熱門文章
PTT數位生活區 即時熱門文章