Python 板


LINE

經過大家的提醒,我修改了我的代碼如下 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 + obj_grab.dic_map[key] def transferConcat(args): return concatMessage(*args) 結果變82秒.... 人生已經如此的艱難... 請問這裡哪一步又做錯了呢? ------------------------------------------------------------------------ 補充:obj_grab是一個list,裡面放不同file input產生的logCatcher content是我要改的file,用manager()宣告是要讓不同process同時修改 ※ 引述《ntuleo (里歐)》之銘言: : 主要是參考segmentfault的這篇 : http://segmentfault.com/a/1190000000414339 : 看起來很有效,可是實際... : if __name__ == "__name__": : pool = Pool() : content = pool.map(transferConcat, [(obj_grab, content)])[0] : pool.close() : pool.join() : 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 : def transferConcat(args): : return concatMessage(*args) : 以上是我的代碼(部分,只貼問題點),執行時間22秒 : 若單純執行method大概也是22秒...等於沒加速... : 我試過調整pool的數量,沒什麼效果 : 請問要怎麼做才能真正體現mulitiProcess的效能呢? --



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 61.221.50.98
※ 文章網址: https://webptt.com/m.aspx?n=bbs/Python/M.1430271720.A.120.html
1F:→ ccwang002: 你可能要說明一下你的程式做了什麼,或者給個 sample 04/29 12:48
2F:→ ccwang002: 因為我不知道怎麼把你原本的 code 跟新版的對應 04/29 12:49
3F:推 CaptainH: 這code真是可怕…就算能動也一堆bug 04/29 12:59
4F:推 CaptainH: 所有的process都存取同一份 content,又在迴圈裡更改迭 04/29 13:01
5F:→ CaptainH: 代對象,太可怕了 04/29 13:01
※ 編輯: ntuleo (124.219.31.93), 04/29/2015 19:30:32
6F:→ ntuleo: 很可怕嗎XD multiprocess不都是這樣嗎? 04/29 19:31
7F:推 beatitude: 都已經在用multiprocessing了還不懂得避開副作用 高手 04/29 19:42
8F:→ ntuleo: 怎麼說呢? 可以指點我一下嗎? 我不是高手... 04/29 19:45
9F:推 LiloHuang: 你不應該嘗試去修改輸入的資料,除非是 Shared memory 04/29 20:01
10F:→ LiloHuang: 無論是 multiprocess 或者 multithread 的實作裡 04/29 20:02
11F:→ LiloHuang: 你得想辦法讓每個 process (或 thread) 各自跑各自的 04/29 20:02
12F:→ LiloHuang: 等到跑完之後,再將資料做合併,才是一個比較好的方式 04/29 20:03
13F:→ LiloHuang: 當然這個方法未必適用於你要解決的問題,只是一旦使用 04/29 20:03
14F:→ LiloHuang: Shared memory 之後,你就得進行 Synchronization 保護 04/29 20:04
15F:→ LiloHuang: 過度的 Synchronization 會造成 CPUs 浪費時間在競爭鎖 04/29 20:04
16F:→ LiloHuang: 舉個例子來說,假設輸入是 a-z 的字串,平行的轉成大寫 04/29 20:05
17F:→ LiloHuang: from multiprocessing.pool import ThreadPool 04/29 20:05
18F:→ LiloHuang: pool = ThreadPool() 04/29 20:05
19F:→ LiloHuang: print reduce(lambda x,y: x+y, pool.map( 04/29 20:05
20F:→ LiloHuang: lambda x:x.upper(), map(chr, range(97, 123)))) 04/29 20:05
21F:→ LiloHuang: 上述的範例內,輸入是一個 list (分別為 a-z 字元) 04/29 20:07
22F:→ LiloHuang: 輸出也是一個 list (已經轉成 A-Z),再用 reduce 合併 04/29 20:07
23F:→ LiloHuang: 這就是一個概念,想要平行處理就要讓 task 真正的平行 04/29 20:07
24F:→ LiloHuang: 然而上述的例子,由於並不是 CPU intensive 的計算 04/29 20:09
25F:→ LiloHuang: 開了 thread (或 process) 反而會比沒開來的慢 04/29 20:09
26F:→ LiloHuang: 我無法回答你的程式為何會如此慢,建議貼 GitHub Gist 04/29 20:10
27F:→ LiloHuang: 如果你能附上完整的程式碼,以及可重現問題的輸入資料 04/29 20:11
28F:→ LiloHuang: 相信其他板友會比較有機會能夠幫你找到問題的癥結點 04/29 20:12
29F:推 LiloHuang: pool.map(...) 的概念是有輸入跟輸出,要特別留意這點 04/29 20:16
30F:→ LiloHuang: 另外實務上,請盡量避免使用 ThreadPool,改用 Pool 04/29 20:17
31F:→ LiloHuang: 我只是為求簡便示範給你看,以免實際程式被 GIL 給拖慢 04/29 20:17







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:Boy-Girl站內搜尋

TOP