Python進程池基本概念
前言:
創(chuàng)建進程池可以形象地理解為創(chuàng)建一個并行的流水線,只需創(chuàng)建一次流水線的消耗,處理接收到的任務(wù)的,不使用進程池。 ,浪費時間。
中方本來沒有進程的,除了python
的,使用線程池的語言,是進程的其他線程池(而進程是執(zhí)行業(yè)務(wù)的其他任務(wù))。python的原因(因為Cython的概念),線程編程不同的并行,把線程池的概念轉(zhuǎn)移到了進程中,命名為進程池。
一、python進程池
創(chuàng)建的子進程數(shù)量不多時,可以直接利用多處理進程中的進程動態(tài)形成需要的進程。
如果是上百量甚至巨大上千,手動的去創(chuàng)建進程的工作目標(biāo),此時就可以為多進程模塊提供池的方法。
1、初始化 Pool
時,可以指定一個進程數(shù)
2、當(dāng)有新的請求提交到 Pool 中時
- 如果池還沒有滿,那么就用創(chuàng)建一個新進程的執(zhí)行該請求;
- 如果池中的進程達到指定的任務(wù),那么已經(jīng)有多少時間,直到有進程結(jié)束,會用之前的請求進程來執(zhí)行新的任務(wù)。
二、進程池如何使用?
申請()
函數(shù)原型:apply (func, args=()[, kwds={}]])
該函數(shù)傳遞不定參數(shù),同 python 中的應(yīng)用函數(shù)一致,主進程會被阻止函數(shù)執(zhí)行結(jié)束(不建議使用,并且 3.x 以后不再出現(xiàn)使用)
apply_async
函數(shù)原型:apply_async(func[, args=()[, kwds={}[, callback=None]]])
與應(yīng)用一致,但它是非進行不支持的使用支持結(jié)果返回后反對
地圖()
函數(shù)原型:map(func, iterable[, chunksize=None])
池類中的映射表的行為必須基本一致,它會使用第二個進程與先前的結(jié)果返回:
但在實際使用中,參數(shù)是一個調(diào)用,在整個應(yīng)用程序中都需要注意,程序會運行子進程。
map_async()
函數(shù)原型:map_async(func, iterable[, chunksize[, callback]])
與地圖匹配一致,但它是非阻尼的。
close()
關(guān)閉進程池(pool
),不再接受新的任務(wù)。
終端()
結(jié)束工作進程,不再處理未處理的任務(wù)。
加入()
主進程停止等待子進程的退出,加入方法要在關(guān)閉或終止使用之后。
三、代碼實列
# 導(dǎo)入相關(guān)multiprocessing包 import multiprocessing # 創(chuàng)建擁有CPU核心數(shù)量的進程的進程池 pool = multiprocessing.Pool(processes=multiprocessing.cpu_count()) for i in ?range ( 100 ): ##制動等待當(dāng)前任務(wù)的進程結(jié)束# pool.apply(func=pow, args=(i,2)) ? ?? ? ?? ? ? # 不延遲當(dāng)前任務(wù)的進程結(jié)束 ? ? pool.apply_async(func= pow , args=(i, 2 )) # # map函數(shù)到一個列表,延遲返回值 # results = pool.map(func=print, iterable=[i for i in range(10000)]) # # 不延遲等待返回值,未運行完就調(diào)用results會報錯。 # results = poolmap_async(func=print, iterable=[i for i in range(10000)]) #close之后不會有新的進程加入到pool ?pool.close() #加入函數(shù)等待所有子進程#調(diào)用加入之前,先結(jié)束調(diào)用close函數(shù),否則會出錯。 ?pool.join() # # 結(jié)束工作進程,不再處理未完成的任務(wù)。 # pool.terminate()
四、進程池中的進程和一般的進程有什么區(qū)別?
進程池中的Queue:
- 如果要使用進程池創(chuàng)建進程,就需要使用
multiprocessing.Manager()
中的Queue()
,而不是multiprocessing.Queue()
。 - 使用的方法是一樣的,都已經(jīng)成功了,再用q.put()添加、q.get()等待獲取。
到此這篇關(guān)于Python進程池基本概念的文章就介紹到這了,更多相關(guān)Python進程池內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Kwargs傳遞給Python 中的另一個函數(shù)實現(xiàn)方法
Python 列出了可以傳遞給程序中的函數(shù)的兩種類型的參數(shù), 非關(guān)鍵字參數(shù)**args和關(guān)鍵字參數(shù) **kwargs ,在本文中,我們將討論如何使用關(guān)鍵字參數(shù)及如何將關(guān)鍵字參數(shù)傳遞給另一個函數(shù),感興趣的朋友跟隨小編一起看看吧2023-08-08使用Python下載歌詞并嵌入歌曲文件中的實現(xiàn)代碼
這篇文章主要介紹了使用Python下載歌詞并嵌入歌曲文件中的實現(xiàn)代碼,需要借助eyed3模塊,需要的朋友可以參考下2015-11-11Python面向?qū)ο蟪绦蛟O(shè)計之靜態(tài)方法、類方法、屬性方法原理與用法分析
這篇文章主要介紹了Python面向?qū)ο蟪绦蛟O(shè)計之靜態(tài)方法、類方法、屬性方法,結(jié)合實例形式分析了Python靜態(tài)方法、類方法、屬性方法相關(guān)概念、原理、用法及相關(guān)操作注意事項,需要的朋友可以參考下2020-03-03神經(jīng)網(wǎng)絡(luò)算法RNN實現(xiàn)時間序列預(yù)測
這篇文章主要為大家介紹了神經(jīng)網(wǎng)絡(luò)算法RNN實現(xiàn)時間序列預(yù)測示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-04-04Python OpenCV使用dlib進行多目標(biāo)跟蹤詳解
這篇文章主要為大家介紹了如何使用 dlib 庫在實時視頻中有效地跟蹤多個對象,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)OpenCV有一定幫助,需要的可以參考一下2022-03-03Python?中strip()函數(shù)詳細(xì)說明及使用方法
strip()函數(shù)是Python字符串方法之一,用于處理字符串的前導(dǎo)和尾隨空白字符,它返回一個新字符串,該字符串是原始字符串去除前導(dǎo)和尾隨空格(包括空格、制表符、換行符等)后的結(jié)果,這篇文章主要介紹了Python?中strip()函數(shù)詳細(xì)說明及使用方法,需要的朋友可以參考下2024-02-02