python 多程序以及程序池使用簡單示例

2021-09-19 13:03:05 字數 1410 閱讀 4790

在利用 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...