python 程序池pool簡單使用

2022-06-18 05:33:11 字數 2999 閱讀 4452

平常會經常用到多程序,可以用程序池pool來進行自動控制程序,下面介紹一下pool的簡單使用。

需要主動是,在windows上要想使用程序模組,就必須把有關程序的**寫if __name__ == 『__main__』 :語句的下面,才能正常使用windows下的程序模組。unix/linux下則不需要。

pool類

pool類可以提供指定數量的程序供使用者呼叫,當有新的請求提交到pool中時,如果池還沒有滿,就會建立乙個新的程序來執行請求。如果池滿,請求就會告知先等待,直到池中有程序結束,

才會建立新的程序來執行這些請求。 

下面介紹一下multiprocessing 模組下的pool類下的幾個方法:

3、map()

函式原型:map(func, iterable[, chunksize=none])

pool類中的map方法,與內建的map函式用法行為基本一致,它會使程序阻塞直到結果返回。 

注意:雖然第二個引數是乙個迭代器,但在實際使用中,必須在整個佇列都就緒後,程式才會執行子程序。

4、map_async()

5、close()

關閉程序池(pool),使其不在接受新的任務。

6、terminal()

結束工作程序,不在處理未處理的任務。

7、join()

主程序阻塞等待子程序的退出, join方法要在close或terminate之後使用。

簡單實現**

import multiprocessing

import time

def func(msg):

print("msg:", msg)

time.sleep(3)

print("end,", msg)

if __name__ == "__main__":

# 這裡設定允許同時執行的的程序數量要考慮機器cpu的數量,程序的數量最好別小於cpu的數量,

# 因為即使大於cpu的數量,增加了任務排程的時間,效率反而不能有效提高

pool = multiprocessing.pool(processes = 3)

item_list = ['processes1' ,'processes2' ,'processes3' ,'processes4' ,'processes5' ,]

count = len(item_list)

for item in item_list:

msg = "hello %s" %item

# 維持執行的程序總數為processes,當乙個程序執行完畢後會新增新的程序進去

pool.close()

pool.join() # 呼叫join之前,先呼叫close函式,否則會出錯。執行完close後不會有新的程序加入到pool,join函式等待所有子程序結束

平常會經常用到多程序,可以用程序池pool來進行自動控制程序,下面介紹一下pool的簡單使用。

需要主動是,在windows上要想使用程序模組,就必須把有關程序的**寫if __name__ == 『__main__』 :語句的下面,才能正常使用windows下的程序模組。unix/linux下則不需要。

pool類

pool類可以提供指定數量的程序供使用者呼叫,當有新的請求提交到pool中時,如果池還沒有滿,就會建立乙個新的程序來執行請求。如果池滿,請求就會告知先等待,直到池中有程序結束,

才會建立新的程序來執行這些請求。 

下面介紹一下multiprocessing 模組下的pool類下的幾個方法:

3、map()

函式原型:map(func, iterable[, chunksize=none])

pool類中的map方法,與內建的map函式用法行為基本一致,它會使程序阻塞直到結果返回。 

注意:雖然第二個引數是乙個迭代器,但在實際使用中,必須在整個佇列都就緒後,程式才會執行子程序。

4、map_async()

5、close()

關閉程序池(pool),使其不在接受新的任務。

6、terminal()

結束工作程序,不在處理未處理的任務。

7、join()

主程序阻塞等待子程序的退出, join方法要在close或terminate之後使用。

簡單實現**

import multiprocessing

import time

def func(msg):

print("msg:", msg)

time.sleep(3)

print("end,", msg)

if __name__ == "__main__":

# 這裡設定允許同時執行的的程序數量要考慮機器cpu的數量,程序的數量最好別小於cpu的數量,

# 因為即使大於cpu的數量,增加了任務排程的時間,效率反而不能有效提高

pool = multiprocessing.pool(processes = 3)

item_list = ['processes1' ,'processes2' ,'processes3' ,'processes4' ,'processes5' ,]

count = len(item_list)

for item in item_list:

msg = "hello %s" %item

# 維持執行的程序總數為processes,當乙個程序執行完畢後會新增新的程序進去

pool.close()

pool.join() # 呼叫join之前,先呼叫close函式,否則會出錯。執行完close後不會有新的程序加入到pool,join函式等待所有子程序結束

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 函式名,引數列表的列表 所謂的引數列表的列表是把所有的任務的...