python中的進程池


1.進程池的概念

python中,進程池內部會維護一個進程序列。當需要時,程序會去進程池中獲取一個進程。

如果進程池序列中沒有可供使用的進程,那么程序就會等待,直到進程池中有可用進程為止。

2.進程池的內置方法

  • apply 從進程池里取一個進程並同步執行
  • apply_async 從進程池里取出一個進程並異步執行
  • terminate 立刻關閉進程池
  • join 主進程等待所有子進程執行完畢,必須在close或terminete之后
  • close 等待所有進程結束才關閉線程池

同步是指一個進程在執行某個請求的時候,必須要到收到對方返回的信息才繼續執行下去

異步是指進程在執行某個請求時,不管其他的進程的狀態,這個進程就執行后續操作;
當有消息返回時系統會通知進程進行處理,這樣可以提高執行的效率

例如:打電話就是同步通信,發信息就是異步通信。

3.進程池的使用

代碼如下:

from multiprocessing import Pool
import time

def func(args):
	time.sleep(1)	#程序休眠1s
	print("%s------>%s"%(args,time.ctime()))	#打印參數及時間

if __name__=="__main__":
	p1=Pool(2)	#設定開啟2個進程池
	for i in range(10):
		p1.apply_async(func=func,args=(i,))	#設定異步執行任務

	p1.close()	#關閉進程池
	time.sleep(2)	#程序休眠2s
	p1.terminate()	#關閉進程池
	p1.join()	#阻塞進程池
	print("ending")		#打印結束語句

程序執行結果:

0------>Thu Jul 20 20:18:43 2017
1------>Thu Jul 20 20:18:43 2017
ending

可以看到,在程序執行過程中,關閉進程池,則程序會立即停止,不會再繼續執行后續語句。

4.修改程序,使程序能夠執行全部的任務

代碼如下:

from multiprocessing import Pool
import time

def func(args):
	time.sleep(1)	#休眠1s
	print("%s------>%s"%(args,time.ctime()))	#打印傳遞的參數及時間 

if __name__=="__main__":
	p1=Pool(2)	#定義2個進程池
	for i in range(10):	#定義循環10次
		p1.apply_async(func=func,args=(i,))	#異步執行任務

	p1.close()		#等待所有的任務都完成才關閉進程池
	p1.join()
	print("ending")

執行結果如下:

0------>Thu Jul 20 20:19:12 2017
1------>Thu Jul 20 20:19:12 2017
2------>Thu Jul 20 20:19:13 2017
3------>Thu Jul 20 20:19:13 2017
4------>Thu Jul 20 20:19:14 2017
5------>Thu Jul 20 20:19:14 2017
6------>Thu Jul 20 20:19:15 2017
7------>Thu Jul 20 20:19:15 2017
8------>Thu Jul 20 20:19:16 2017
9------>Thu Jul 20 20:19:16 2017
ending


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM