先把工作寫成單參數函數func,然後調用multiprocessing.Pool,設置計算使用的核心數,通過map將參數分配給func進行計算,簡單實現如下。
from multiprocessing import Pool
def func(parameter):
...
pool = Pool(4) # set the pool size to 4
pool.map(func, parameter)
pool.close()
pool.join()
上述代碼使用4個核心進行計算,運行後用top查看進程可以看到四個相同的Python進程,單個進程CPU佔用率最高100%。這種多進程實現適用於CPU密集型工作。
多參數函數的並行需要對參數做進一步封裝,可以參見https://www.rawidn.com/posts/Python-multiprocessing-for-multiple-arguments.html。
對於IO密集型工作可以調用multiprocessing的子庫dummy實現,導入部分如下,其他代碼不變。
from multiprocessing.dummy import Pool
運行時只有一個Python進程,但其CPU佔用率可以超過100%。
更詳細的說明可以參見https://segmentfault.com/a/1190000000414339。
此外,還可以通過Parallel Python模塊實現,但目前還沒具體測試,其使用可以看見http://wiki.jikexueyuan.com/project/python-actual-combat/tutorial-25.html。