python 多程序 高階 程序池

2021-09-26 08:45:50 字數 1550 閱讀 1404

如果需要啟動大量的子程序,使用程序池批量建立子程序的方式更加常見,因為當被操作對物件數目不大時,可以直接利用multiprocessing中的process動態生成多個程序,如果數量大,此時就應該使用pool。

pool 可以提供指定數量的程序供使用者呼叫,預設大小是cpu的核數。當有新的請求提交到pool中時,如果池還沒有滿,就會建立乙個新的程序用來執行該請求;但是如果池中的程序數已經達到規定最大值,那麼該請求就會等待,直到池中有程序結束,才會建立新的程序來處理他,示例:

# -*- coding: utf-8 -*-

# user: jier

from multiprocessing import pool

import os, time, random

def run_task(name):

print('task %s (pid = %s) is running...' % (name, os.getpid()))

time.sleep(random.random() * 3)

print("task %s end." % name)

if __name__ == "__main__":

print('current process %s.' % os.getpid())

p = pool(processes=3)

for i in range(5):

print("waiting for all subprocesses done...")

p.close()

p.join()

print('all subprocesses done.')

**執行完畢輸入結果如下:

current process 15160.

waiting for all subprocesses done...

task 0 (pid = 8392) is running...

task 1 (pid = 9488) is running...

task 2 (pid = 22604) is running...

task 0 end.

task 3 (pid = 8392) is running...

task 1 end.

task 4 (pid = 9488) is running...

task 2 end.

task 4 end.

task 3 end.

all subprocesses done.

process finished with exit code 0

從上面可以看到,上述程序先建立了容量為3的程序池,依次向程序池中新增了5個任務。從執行結果中可以看到雖然新增了5個任務,但是一開始只執行了三個,而且每次最多執行三個程序。當乙個任務結束了,新的任務依次新增進來,任務執行使用的程序依然是原來的程序,可以通過程序的pid看出來。

ps:pool物件呼叫join() 方法會等待所有子程序執行完畢,呼叫join() 之前必須先呼叫close(),呼叫close() 之後就不能繼續新增新的process了。

python多程序之程序池

在利用python進行系統管理的時候,特別是同時操作多個檔案目錄,或者遠端控制多台主機,並行操作可以節約大量的時間。當被操作物件數目不大時,可以直接利用multiprocessing中的process動態成生多個程序,十幾個還好,但如果是上百個,上千個目標,手動的去限制程序數量卻又太過繁瑣,此時可以...

Python多程序 程序池pool

from multiprocessing import process,pool import time defselect time.sleep 1 print time.ctime return 這是每個進行執行完後返回的值,該值會會被 callback函式接收 def foo args pri...

Python 多程序與程序池

fork方法是呼叫一次,返回兩次,原因在於作業系統將當前程序 父程序 複製出乙份程序 子程序 這兩個程序幾乎完全相同,於是fork方法分別在父程序和子程序中返回。子程序中永遠返回0,父程序中返回的是子程序的id。importos if name main print current process ...