看板 Python 關於我們 聯絡資訊
首先感謝大家的回答,感謝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
ug945: 開多個manager.list() 存修改過的資料 最後再合併 04/30 14:15
ccwang002: 方便提供測資嗎? 04/30 15:32
ntuleo: 測資沒辦法提供抱歉,不過就是讀進來的string阿應該都一樣 04/30 16:25
CaptainH: 你還是沒搞清楚,你的迴圈彼此有相依性,是不能平行化 04/30 19:47
CaptainH: 的 04/30 19:47
※ 編輯: ntuleo (60.250.185.98), 05/01/2015 11:55:17