網(wǎng)站首頁(yè) 編程語(yǔ)言 正文
前言:
創(chuàng)建進(jìn)程池可以形象地理解為創(chuàng)建一個(gè)并行的流水線,只需創(chuàng)建一次流水線的消耗,處理接收到的任務(wù)的,不使用進(jìn)程池。 ,浪費(fèi)時(shí)間。
中方本來(lái)沒(méi)有進(jìn)程的,除了python
的,使用線程池的語(yǔ)言,是進(jìn)程的其他線程池(而進(jìn)程是執(zhí)行業(yè)務(wù)的其他任務(wù))。python的原因(因?yàn)镃ython的概念),線程編程不同的并行,把線程池的概念轉(zhuǎn)移到了進(jìn)程中,命名為進(jìn)程池。
一、python進(jìn)程池
創(chuàng)建的子進(jìn)程數(shù)量不多時(shí),可以直接利用多處理進(jìn)程中的進(jìn)程動(dòng)態(tài)形成需要的進(jìn)程。
如果是上百量甚至巨大上千,手動(dòng)的去創(chuàng)建進(jìn)程的工作目標(biāo),此時(shí)就可以為多進(jìn)程模塊提供池的方法。
1、初始化 Pool
時(shí),可以指定一個(gè)進(jìn)程數(shù)
2、當(dāng)有新的請(qǐng)求提交到 Pool 中時(shí)
- 如果池還沒(méi)有滿,那么就用創(chuàng)建一個(gè)新進(jìn)程的執(zhí)行該請(qǐng)求;
- 如果池中的進(jìn)程達(dá)到指定的任務(wù),那么已經(jīng)有多少時(shí)間,直到有進(jìn)程結(jié)束,會(huì)用之前的請(qǐng)求進(jìn)程來(lái)執(zhí)行新的任務(wù)。
二、進(jìn)程池如何使用?
申請(qǐng)()
函數(shù)原型:apply (func, args=()[, kwds={}]])
該函數(shù)傳遞不定參數(shù),同 python 中的應(yīng)用函數(shù)一致,主進(jìn)程會(huì)被阻止函數(shù)執(zhí)行結(jié)束(不建議使用,并且 3.x 以后不再出現(xiàn)使用)
apply_async
函數(shù)原型:apply_async(func[, args=()[, kwds={}[, callback=None]]])
與應(yīng)用一致,但它是非進(jìn)行不支持的使用支持結(jié)果返回后反對(duì)
地圖()
函數(shù)原型:map(func, iterable[, chunksize=None])
池類中的映射表的行為必須基本一致,它會(huì)使用第二個(gè)進(jìn)程與先前的結(jié)果返回:
但在實(shí)際使用中,參數(shù)是一個(gè)調(diào)用,在整個(gè)應(yīng)用程序中都需要注意,程序會(huì)運(yùn)行子進(jìn)程。
map_async()
函數(shù)原型:map_async(func, iterable[, chunksize[, callback]])
與地圖匹配一致,但它是非阻尼的。
close()
關(guān)閉進(jìn)程池(pool
),不再接受新的任務(wù)。
終端()
結(jié)束工作進(jìn)程,不再處理未處理的任務(wù)。
加入()
主進(jìn)程停止等待子進(jìn)程的退出,加入方法要在關(guān)閉或終止使用之后。
三、代碼實(shí)列
# 導(dǎo)入相關(guān)multiprocessing包 import multiprocessing # 創(chuàng)建擁有CPU核心數(shù)量的進(jìn)程的進(jìn)程池 pool = multiprocessing.Pool(processes=multiprocessing.cpu_count()) for i in ?range ( 100 ): ##制動(dòng)等待當(dāng)前任務(wù)的進(jìn)程結(jié)束# pool.apply(func=pow, args=(i,2)) ? ?? ? ?? ? ? # 不延遲當(dāng)前任務(wù)的進(jìn)程結(jié)束 ? ? pool.apply_async(func= pow , args=(i, 2 )) # # map函數(shù)到一個(gè)列表,延遲返回值 # results = pool.map(func=print, iterable=[i for i in range(10000)]) # # 不延遲等待返回值,未運(yùn)行完就調(diào)用results會(huì)報(bào)錯(cuò)。 # results = poolmap_async(func=print, iterable=[i for i in range(10000)]) #close之后不會(huì)有新的進(jìn)程加入到pool ?pool.close() #加入函數(shù)等待所有子進(jìn)程#調(diào)用加入之前,先結(jié)束調(diào)用close函數(shù),否則會(huì)出錯(cuò)。 ?pool.join() # # 結(jié)束工作進(jìn)程,不再處理未完成的任務(wù)。 # pool.terminate()
四、進(jìn)程池中的進(jìn)程和一般的進(jìn)程有什么區(qū)別?
進(jìn)程池中的Queue:
- 如果要使用進(jìn)程池創(chuàng)建進(jìn)程,就需要使用
multiprocessing.Manager()
中的Queue()
,而不是multiprocessing.Queue()
。 - 使用的方法是一樣的,都已經(jīng)成功了,再用q.put()添加、q.get()等待獲取。
原文鏈接:https://blog.csdn.net/weixin_46931877/article/details/123849788
相關(guān)推薦
- 2023-02-09 python如何尋找主串中所有指定子串下標(biāo)_python
- 2022-06-10 C語(yǔ)言?推理證明帶環(huán)鏈表詳細(xì)過(guò)程_C 語(yǔ)言
- 2023-12-17 SpringSecurity的默認(rèn)登錄頁(yè)的使用
- 2022-05-25 Postman動(dòng)態(tài)獲取值(動(dòng)態(tài)設(shè)置全局變量)
- 2022-03-05 CentOS系統(tǒng)下安裝及配置JDK介紹_Linux
- 2022-09-26 使用JDBC連接數(shù)據(jù)庫(kù)執(zhí)行sql語(yǔ)句,創(chuàng)建數(shù)據(jù)庫(kù)連接池
- 2023-05-31 Pandas使用分隔符或正則表達(dá)式將字符串拆分為多列_python
- 2021-12-11 Android?NDK開(kāi)發(fā)(C語(yǔ)言字符串)_Android
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過(guò)濾器
- Spring Security概述快速入門(mén)
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支