作者查詢 / LiloHuang
作者 LiloHuang 在 PTT [ Python ] 看板的留言(推文), 共373則
限定看板:Python
看板排序:
全部C_and_CPP835Perl579Python373Programming77Soft_Job58EZsoft39Sodagreen28PHP25graduate18Web_Design17RegExp10CMWang8NY-Yankees8CodeJob5joke5Blog4java4HKday3iOS3SENIORHIGH3SYSOP3C_Sharp2CSMU-AC922DC2MacDev2optical2PhotoCritic2Prob_Solve2share2asciiart1ask1ASM1Bz1CTSH943011FJU-BA94C1FJU-Leader1global_univ1Gossiping1hjsh1HSNU_10081jingle1juniorhigh1LinuxDev1Master_D1NCTU-STAT95G1NCTU-STAT96G1NCYU_BE_95A1NTUE_Nse981NUU_Talk1Olympics_ISG1PushDoll1SCU_Chin96C1Sony-style1tax1TFSHS66th3251TKU_EE_92C1TKU_EW94B1TKU_TSPCB931TTU-I91A1Visual_Basic1WuLing46-3171<< 收起看板(61)
9F推: 你不應該嘗試去修改輸入的資料,除非是 Shared memory04/29 20:01
10F→: 無論是 multiprocess 或者 multithread 的實作裡04/29 20:02
11F→: 你得想辦法讓每個 process (或 thread) 各自跑各自的04/29 20:02
12F→: 等到跑完之後,再將資料做合併,才是一個比較好的方式04/29 20:03
13F→: 當然這個方法未必適用於你要解決的問題,只是一旦使用04/29 20:03
14F→: Shared memory 之後,你就得進行 Synchronization 保護04/29 20:04
15F→: 過度的 Synchronization 會造成 CPUs 浪費時間在競爭鎖04/29 20:04
16F→: 舉個例子來說,假設輸入是 a-z 的字串,平行的轉成大寫04/29 20:05
17F→: from multiprocessing.pool import ThreadPool04/29 20:05
18F→: pool = ThreadPool()04/29 20:05
19F→: print reduce(lambda x,y: x+y, pool.map(04/29 20:05
20F→: lambda x:x.upper(), map(chr, range(97, 123))))04/29 20:05
21F→: 上述的範例內,輸入是一個 list (分別為 a-z 字元)04/29 20:07
22F→: 輸出也是一個 list (已經轉成 A-Z),再用 reduce 合併04/29 20:07
23F→: 這就是一個概念,想要平行處理就要讓 task 真正的平行04/29 20:07
24F→: 然而上述的例子,由於並不是 CPU intensive 的計算04/29 20:09
25F→: 開了 thread (或 process) 反而會比沒開來的慢04/29 20:09
26F→: 我無法回答你的程式為何會如此慢,建議貼 GitHub Gist04/29 20:10
27F→: 如果你能附上完整的程式碼,以及可重現問題的輸入資料04/29 20:11
28F→: 相信其他板友會比較有機會能夠幫你找到問題的癥結點04/29 20:12
29F推: pool.map(...) 的概念是有輸入跟輸出,要特別留意這點04/29 20:16
30F→: 另外實務上,請盡量避免使用 ThreadPool,改用 Pool04/29 20:17
31F→: 我只是為求簡便示範給你看,以免實際程式被 GIL 給拖慢04/29 20:17
10F推: Python Concurrency From the Ground Up - PyCon 201504/28 22:39
11F→: 看看 David Beazley 大師的影片 http://goo.gl/oCuZaJ04/28 22:39
12F推: 基本上 Python 的 multiprocessing 是以 tasks 為單位04/29 00:22
13F→: 你必須要自己先把工作轉化成一堆 task 再來進行平行04/29 00:22
14F→: 畢竟這不像 OpenMP 加個 #pragma omp parallel 就會動04/29 00:23
15F→: 就像 ccwang002 提到的,你的 task 目前只有一個...04/29 00:24
16F推: 你可以嘗試著把第一層迴圈展開,換成用 map 的寫法就好04/29 00:26
17F→: 處理的 func 裡面不要去存取共享變數,讓每個 process04/29 00:32
18F→: 都能夠獨立的跑完它的結果,之後再把結果進行 reduce04/29 00:33
1F推: 我推薦 http://komodoide.com/ 還有 GUI debugger04/24 21:33
2F→: 如果不需要 GUI debugger 可以考慮免費的 Komodo Edit04/24 21:40
3F→: http://goo.gl/cM65kd 當然花錢買的版本還是好用很多04/24 21:40
4F推: 至於流程圖分析工具,https://scitools.com/ 是首選04/24 21:45
1F推: ab -c10000 -n200000 http://foo.bar/04/18 10:20
2F→: 或者可使用 https://loadimpact.com/ 線上工具進行測試04/18 10:20
6F推: 其實在選直譯器實作,還得考慮到穩定性跟未來的維護04/01 19:23
11F推: 同意 :) 其實如果很在意速度,通常 Python 不會被考慮04/01 22:35
12F→: 相反的,撇開有 GIL 限制,寫 Python 還是很美好的 :)04/01 22:56
1F推: 參考類似問題在 StackOverflow http://goo.gl/vmtFA903/18 22:34
6F推: 這兒有一些是專門針對 PyPy JIT http://goo.gl/ayctXx03/03 21:11
7F→: 至於拆開後有變快,多少跟 JIT compiler 本身能力有關03/03 21:16
2F推: 會是一個 type object02/19 12:59
15F推: 設定新的 text 後,呼叫 root.update() 來刷新內容02/17 22:50
16F→: 建議把文章標題以及內容修正一下,方便其他板友觀看02/17 22:51
19F推: 不客氣 :)02/18 22:03
1F推: 你的 Python 應該不是自編譯的,因此你不應該使用02/15 19:41
2F→: Debug 模式來編譯你的專案。請改用 Release 模式就可以02/15 19:42
3F→: 如果你有把 python27.lib 複製成 python27_d.lib02/15 19:43
4F→: 也請不要這麼做,這樣就會造成你現在的問題。02/15 19:43