python自2.6開始提供了多程序模組multiprocessing,程序池使用multiprocessing.pool,pool的構造如下:
multiprocessing.pool([processes[, initializer[, initargs[, maxtasksperchild]]]])
processes表示pool中程序的數目,預設地為當前cpu的核數。
initializer表示新程序的初始化函式。
initargs表示新程序的初始化函式的引數。
maxtasksperchild表示每個程序執行task的最大數目(該引數解釋見python 程序池1 - pool使用簡介)。
主程序的執行流程同單程序一致。
3、map(func, iterable[, chunksize])
map方法與在功能上等價與內建的map(),只不過單個任務會並行執行。它會使程序阻塞直到結果返回。
但需注意的是其第二個引數雖然描述的為iterable, 但在實際使用中發現只有在整個佇列全部就緒後,程式才會執行子程序。
4、map_async(func, iterable[, chunksize[, callback]])
5、imap(func, iterable[, chunksize])
與map不同的是, imap的返回結果為iter,需要在主程序中主動使用next來驅動子程序的呼叫。即使子程序沒有返回結果,主程序對於gen_list(l)的 iter還是會繼續進行, 另外根據python2.6文件的描述,對於大資料量的iterable而言,將chunksize設定大一些比預設的1要好。
for x in pool.imap(pool_test, gen_list(l)):
pass
6、imap_unordered(func, iterable[, chunksize])
同imap一致,只不過其並不保證返回結果與迭代傳入的順序一致。
7、close()
關閉pool,使其不再接受新的任務。
8、terminate()
結束工作程序,不再處理未處理的任務。
9、join()
主程序阻塞等待子程序的退出, join方法要在close或terminate之後使用。
參考:
Python多程序 程序池pool
from multiprocessing import process,pool import time defselect time.sleep 1 print time.ctime return 這是每個進行執行完後返回的值,該值會會被 callback函式接收 def foo args pri...
python 程序池Pool詳情
當需要建立的子程序數量不多時,可以直接利用multiprocessing中的process動態成生多個程序,但如果是上百甚至上千個目標,手動的去建立程序的工作量巨大,此時就可以用到multiprocessing模組提供的pool方法。初始化pool時,可以指定乙個最大程序數,當有新的請求提交到poo...
Python多程序4 程序池 Pool
學習 分類目錄 多程序 是multiprocessing模組下的乙個類,是一種建立多程序的更加簡便的方式,可以更加方便的分配任務與傳遞引數。pool mp.pool processes 6 生成程序池 pool的兩個任務分配的函式 map 函式名,引數列表的列表 所謂的引數列表的列表是把所有的任務的...