python Pool常用函數(shù)用法總結(jié)
1、說(shuō)明
apply_async(func[,args[,kwds]):使用非堵塞調(diào)用func(并行執(zhí)行,堵塞方式必須等待上一個(gè)過(guò)程退出才能執(zhí)行下一個(gè)過(guò)程),args是傳輸給func的參數(shù)列表,kwds是傳輸給func的關(guān)鍵詞參數(shù)列表。
close():關(guān)閉Pool,使之不再接受新任務(wù)。
terminate():無(wú)論任務(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開(kāi)始執(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ì)用空閑出來(lái)的子進(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語(yǔ)句之后 print("-----end-----")
運(yùn)行結(jié)果
----start----
0開(kāi)始執(zhí)行,進(jìn)程號(hào)為21466
1開(kāi)始執(zhí)行,進(jìn)程號(hào)為21468
2開(kāi)始執(zhí)行,進(jìn)程號(hào)為21467
0 執(zhí)行完畢,耗時(shí)1.01
3開(kāi)始執(zhí)行,進(jìn)程號(hào)為21466
2 執(zhí)行完畢,耗時(shí)1.24
4開(kāi)始執(zhí)行,進(jìn)程號(hào)為21467
3 執(zhí)行完畢,耗時(shí)0.56
5開(kāi)始執(zhí)行,進(jìn)程號(hào)為21466
1 執(zhí)行完畢,耗時(shí)1.68
6開(kāi)始執(zhí)行,進(jìn)程號(hào)為21468
4 執(zhí)行完畢,耗時(shí)0.67
7開(kāi)始執(zhí)行,進(jìn)程號(hào)為21467
5 執(zhí)行完畢,耗時(shí)0.83
8開(kāi)始執(zhí)行,進(jìn)程號(hào)為21466
6 執(zhí)行完畢,耗時(shí)0.75
9開(kāi)始執(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)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python學(xué)習(xí)筆記之os模塊使用總結(jié)
這篇文章主要介紹了Python學(xué)習(xí)筆記之os模塊使用總結(jié),本文總結(jié)了多個(gè)常用方法,需要的朋友可以參考下2014-11-11對(duì)pandas處理json數(shù)據(jù)的方法詳解
今天小編就為大家分享一篇對(duì)pandas處理json數(shù)據(jù)的方法詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-02-02關(guān)于Python中兩個(gè)不同shape的數(shù)組間運(yùn)算規(guī)則
這篇文章主要介紹了關(guān)于Python中兩個(gè)不同shape的數(shù)組間運(yùn)算規(guī)則,眾所周知,相同?shape?的兩個(gè)數(shù)組間運(yùn)算是指兩個(gè)數(shù)組的對(duì)應(yīng)元素相加,我們經(jīng)常會(huì)碰到一些不同?shape?的數(shù)組間運(yùn)算,需要的朋友可以參考下2023-08-08Biblibili視頻投稿接口分析并以Python實(shí)現(xiàn)自動(dòng)投稿功能
這篇文章主要介紹了Biblibili視頻投稿接口分析并以Python實(shí)現(xiàn)自動(dòng)投稿功能,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-02-02Python itertools庫(kù)中product函數(shù)使用實(shí)例探究
這篇文章主要為大家介紹了Python itertools庫(kù)中product函數(shù)使用實(shí)例探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01基python實(shí)現(xiàn)多線程網(wǎng)頁(yè)爬蟲(chóng)
python是支持多線程的, 主要是通過(guò)thread和threading這兩個(gè)模塊來(lái)實(shí)現(xiàn)的,本文主要給大家分享python實(shí)現(xiàn)多線程網(wǎng)頁(yè)爬蟲(chóng),需要的朋友可以參考下2015-09-09Django框架HttpResponse對(duì)象用法實(shí)例分析
這篇文章主要介紹了Django框架HttpResponse對(duì)象用法,結(jié)合實(shí)例形式分析了Django框架HttpResponse對(duì)象基本原理、功能及響應(yīng)請(qǐng)求的相關(guān)操作技巧,需要的朋友可以參考下2019-11-11