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í)例
#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ò)展:
# -*- 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)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
您可能感興趣的文章:- python中的內(nèi)置函數(shù)max()和min()及mas()函數(shù)的高級(jí)用法
- python print()函數(shù)的end參數(shù)和sep參數(shù)的用法說明
- python處理emoji表情(兩個(gè)函數(shù)解決兩者之間的聯(lián)系)
- 解決python2中unicode()函數(shù)在python3中報(bào)錯(cuò)的問題
- python繪圖subplots函數(shù)使用模板的示例代碼
- python-opencv中的cv2.inRange函數(shù)用法說明
- Python input()函數(shù)用法大全
- python 如何用map()函數(shù)創(chuàng)建多線程任務(wù)
- Python函數(shù)參數(shù)中的*與**運(yùn)算符
- 詳解python函數(shù)傳參傳遞dict/list/set等類型的問題
- Python3去除頭尾指定字符的函數(shù)strip()、lstrip()、rstrip()用法詳解
- Python進(jìn)階之高級(jí)用法詳細(xì)總結(jié)