在利用 python 進行系統管理的時候,特別是同時操作多個檔案目錄,或者遠端控制多台主機,並行操作可以節約大量的時間。當被操作物件數目不大時,可以直接利用 multiprocessing 中的 process 動態成生多個程序,10 幾個還好,但如果是上百個,上千個目標,手動的去限制程序數量卻又太過繁瑣,這時候程序池 pool 發揮作用的時候就到了。
pool 可以提供指定數量的程序,供使用者呼叫,當有新的請求提交到 pool 中時,如果池還沒有滿,那麼就會建立乙個新的程序用來執行該請求;但如果池中的程序數已經達到規定最大值,那麼該請求就會等待,直到池中有程序結束,才會建立新的程序來它。
這裡有乙個簡單的例子:
from multiprocessing import pool
from time import sleep
import os
def f(x):
for i in range(10):
print('%s --- %s ' % (i, x))
sleep(1)
def main():
pool = pool(processes=3) # 設定程序數等於3
for i in range(11, 20):
pool.close()
pool.join()
if result.successful():
print('successful')
if __name__ == "__main__":
main()
先建立容量為 3 的程序池,然後將 f(i) 依次傳遞給它,執行指令碼後利用
ps aux | grep pool.py
函式原型:
該函式用於傳遞不定引數,主程序會被阻塞直到函式執行結束(不建議使用,並且3.x以後不在出現)。
函式原型:
map()
函式原型:
map(func, iterable[, chunksize=none])
pool類中的map方法,與內建的map函式用法行為基本一致,它會使程序阻塞直到返回結果。
注意,雖然第二個引數是乙個迭代器,但在實際使用中,必須在整個佇列都就緒後,程式才會執行子程序。
close()
關閉程序池(pool),使其不在接受新的任務。
terminate()
結束工作程序,不在處理未處理的任務。
join()
主程序阻塞等待子程序的退出,join方法必須在close或terminate之後使用。
參考:
python多程序之程序池
在利用python進行系統管理的時候,特別是同時操作多個檔案目錄,或者遠端控制多台主機,並行操作可以節約大量的時間。當被操作物件數目不大時,可以直接利用multiprocessing中的process動態成生多個程序,十幾個還好,但如果是上百個,上千個目標,手動的去限制程序數量卻又太過繁瑣,此時可以...
python 多程序 高階 程序池
如果需要啟動大量的子程序,使用程序池批量建立子程序的方式更加常見,因為當被操作對物件數目不大時,可以直接利用multiprocessing中的process動態生成多個程序,如果數量大,此時就應該使用pool。pool 可以提供指定數量的程序供使用者呼叫,預設大小是cpu的核數。當有新的請求提交到p...
Python多程序 程序池pool
from multiprocessing import process,pool import time defselect time.sleep 1 print time.ctime return 這是每個進行執行完後返回的值,該值會會被 callback函式接收 def foo args pri...