1、說明
apply_async(func[,args[,kwds]):使用非堵塞調(diào)用func(并行執(zhí)行,堵塞方式必須等待上一個(gè)過程退出才能執(zhí)行下一個(gè)過程),args是傳輸給func的參數(shù)列表,kwds是傳輸給func的關(guān)鍵詞參數(shù)列表。
close():關(guān)閉Pool,使之不再接受新任務(wù)。
terminate():無論任務(wù)是否完成,都要立即終止。
join():主進(jìn)程堵塞,等待子進(jìn)程退出,必須在close或terminate之后使用。
2、實(shí)例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
#coding: utf-8 import multiprocessing import time def func(msg): print ( "msg:" , msg) time.sleep( 3 ) print ( "end" ) if __name__ = = "__main__" : cores = multiprocessing.cpu_count() pool = multiprocessing.Pool(processes = cores) print ( "Adding tasks..." ) for i in range (cores): msg = "hello %d" % (i) pool.apply_async(func, (msg, )) #維持執(zhí)行的進(jìn)程總數(shù)為processes,當(dāng)一個(gè)進(jìn)程執(zhí)行完畢后會(huì)添加新的進(jìn)程進(jìn)去 print ( "Starting tasks..." ) pool.close() pool.join() #調(diào)用join之前,先調(diào)用close函數(shù),否則會(huì)出錯(cuò)。執(zhí)行完close后不會(huì)有新的進(jìn)程加入到pool,join函數(shù)等待所有子進(jìn)程結(jié)束 print ( "Sub-process(es) done." ) |
實(shí)例擴(kuò)展:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
# -*- coding:utf-8 -*- from multiprocessing import Pool import os, time, random def worker(msg): t_start = time.time() print ( "%s開始執(zhí)行,進(jìn)程號(hào)為%d" % (msg,os.getpid())) # random.random()隨機(jī)生成0~1之間的浮點(diǎn)數(shù) time.sleep(random.random() * 2 ) t_stop = time.time() print (msg, "執(zhí)行完畢,耗時(shí)%0.2f" % (t_stop - t_start)) po = Pool( 3 ) # 定義一個(gè)進(jìn)程池,最大進(jìn)程數(shù)3 for i in range ( 0 , 10 ): # Pool().apply_async(要調(diào)用的目標(biāo),(傳遞給目標(biāo)的參數(shù)元祖,)) # 每次循環(huán)將會(huì)用空閑出來的子進(jìn)程去調(diào)用目標(biāo) po.apply_async(worker,(i,)) print ( "----start----" ) po.close() # 關(guān)閉進(jìn)程池,關(guān)閉后po不再接收新的請(qǐng)求 po.join() # 等待po中所有子進(jìn)程執(zhí)行完成,必須放在close語句之后 print ( "-----end-----" ) |
運(yùn)行結(jié)果
----start----
0開始執(zhí)行,進(jìn)程號(hào)為21466
1開始執(zhí)行,進(jìn)程號(hào)為21468
2開始執(zhí)行,進(jìn)程號(hào)為21467
0 執(zhí)行完畢,耗時(shí)1.01
3開始執(zhí)行,進(jìn)程號(hào)為21466
2 執(zhí)行完畢,耗時(shí)1.24
4開始執(zhí)行,進(jìn)程號(hào)為21467
3 執(zhí)行完畢,耗時(shí)0.56
5開始執(zhí)行,進(jìn)程號(hào)為21466
1 執(zhí)行完畢,耗時(shí)1.68
6開始執(zhí)行,進(jìn)程號(hào)為21468
4 執(zhí)行完畢,耗時(shí)0.67
7開始執(zhí)行,進(jìn)程號(hào)為21467
5 執(zhí)行完畢,耗時(shí)0.83
8開始執(zhí)行,進(jìn)程號(hào)為21466
6 執(zhí)行完畢,耗時(shí)0.75
9開始執(zhí)行,進(jìn)程號(hào)為21468
7 執(zhí)行完畢,耗時(shí)1.03
8 執(zhí)行完畢,耗時(shí)1.05
9 執(zhí)行完畢,耗時(shí)1.69
-----end-----
到此這篇關(guān)于python Pool常用函數(shù)用法總結(jié)的文章就介紹到這了,更多相關(guān)python Pool常用函數(shù)有哪些內(nèi)容請(qǐng)搜索服務(wù)器之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持服務(wù)器之家!
原文鏈接:https://www.py.cn/jishu/jichu/29402.html