Re: [懸賞] python multiProcess 問題解法

看板Python作者 (里歐)時間10年前 (2015/04/30 11:58), 10年前編輯推噓0(113)
留言5則, 4人參與, 最新討論串1/1
首先感謝大家的回答,感謝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://www.ptt.cc/bbs/Python/M.1430366304.A.9B3.html ※ 編輯: ntuleo (175.98.146.2), 04/30/2015 11:59:31

04/30 14:15, , 1F
開多個manager.list() 存修改過的資料 最後再合併
04/30 14:15, 1F

04/30 15:32, , 2F
方便提供測資嗎?
04/30 15:32, 2F

04/30 16:25, , 3F
測資沒辦法提供抱歉,不過就是讀進來的string阿應該都一樣
04/30 16:25, 3F

04/30 19:47, , 4F
你還是沒搞清楚,你的迴圈彼此有相依性,是不能平行化
04/30 19:47, 4F

04/30 19:47, , 5F
04/30 19:47, 5F
※ 編輯: ntuleo (60.250.185.98), 05/01/2015 11:55:17
文章代碼(AID): #1LGQXWcp (Python)
文章代碼(AID): #1LGQXWcp (Python)