最近在微調程式的效能,第一個我想到的,就是從多執行緒來下手。
google 說得好,如果程式裡有用到 map,那麼就可以從 map 開始改。
python 有提供 multiprocessing pool 就不用自己寫 pool。
不過,有幾點要注意:
- 這個是 process pool,所以比較吃資源。
- 在執行的時候,由於你寫的 py 會被當成 module 讀進執行。
所以,一定要判斷自身是否為 __main__。也就是要:
if __name__ == '__main__':
# do something
若第 2 點沒注意到,就會不斷地重覆遞迴執行到當掉。
給個失敗的例子:
import multiprocessing
def m1(x):
return x*x
pool = multiprocessing.Pool(processes=3)
pool.map(m1,[‘1’,'2’,'3’,'4’])
給個成功的例子:
import multiprocessing
def m1(x):
return x*x
if __name__ == '__main__':
pool = multiprocessing.Pool(processes=3)
pool.map(m1,[‘1’,'2’,'3’,'4’])
如果本來程式就有按 map / reduce 的方式寫,那換成 multiprocess pool 是很快樂的一件事。
試試吧。
沒有留言:
張貼留言