平常會經常用到多程序,可以用程序池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平常會經常用到多程序,可以用程序池pool來進行自動控制程序,下面介紹一下pool的簡單使用。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函式等待所有子程序結束
需要主動是,在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 multiprocessingimport 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 函式名,引數列表的列表 所謂的引數列表的列表是把所有的任務的...