網站首頁 編程語言 正文
前言:
創建進程池可以形象地理解為創建一個并行的流水線,只需創建一次流水線的消耗,處理接收到的任務的,不使用進程池。 ,浪費時間。
中方本來沒有進程的,除了python
的,使用線程池的語言,是進程的其他線程池(而進程是執行業務的其他任務)。python的原因(因為Cython的概念),線程編程不同的并行,把線程池的概念轉移到了進程中,命名為進程池。
一、python進程池
創建的子進程數量不多時,可以直接利用多處理進程中的進程動態形成需要的進程。
如果是上百量甚至巨大上千,手動的去創建進程的工作目標,此時就可以為多進程模塊提供池的方法。
1、初始化 Pool
時,可以指定一個進程數
2、當有新的請求提交到 Pool 中時
- 如果池還沒有滿,那么就用創建一個新進程的執行該請求;
- 如果池中的進程達到指定的任務,那么已經有多少時間,直到有進程結束,會用之前的請求進程來執行新的任務。
二、進程池如何使用?
申請()
函數原型:apply (func, args=()[, kwds={}]])
該函數傳遞不定參數,同 python 中的應用函數一致,主進程會被阻止函數執行結束(不建議使用,并且 3.x 以后不再出現使用)
apply_async
函數原型:apply_async(func[, args=()[, kwds={}[, callback=None]]])
與應用一致,但它是非進行不支持的使用支持結果返回后反對
地圖()
函數原型:map(func, iterable[, chunksize=None])
池類中的映射表的行為必須基本一致,它會使用第二個進程與先前的結果返回:
但在實際使用中,參數是一個調用,在整個應用程序中都需要注意,程序會運行子進程。
map_async()
函數原型:map_async(func, iterable[, chunksize[, callback]])
與地圖匹配一致,但它是非阻尼的。
close()
關閉進程池(pool
),不再接受新的任務。
終端()
結束工作進程,不再處理未處理的任務。
加入()
主進程停止等待子進程的退出,加入方法要在關閉或終止使用之后。
三、代碼實列
# 導入相關multiprocessing包 import multiprocessing # 創建擁有CPU核心數量的進程的進程池 pool = multiprocessing.Pool(processes=multiprocessing.cpu_count()) for i in ?range ( 100 ): ##制動等待當前任務的進程結束# pool.apply(func=pow, args=(i,2)) ? ?? ? ?? ? ? # 不延遲當前任務的進程結束 ? ? pool.apply_async(func= pow , args=(i, 2 )) # # map函數到一個列表,延遲返回值 # results = pool.map(func=print, iterable=[i for i in range(10000)]) # # 不延遲等待返回值,未運行完就調用results會報錯。 # results = poolmap_async(func=print, iterable=[i for i in range(10000)]) #close之后不會有新的進程加入到pool ?pool.close() #加入函數等待所有子進程#調用加入之前,先結束調用close函數,否則會出錯。 ?pool.join() # # 結束工作進程,不再處理未完成的任務。 # pool.terminate()
四、進程池中的進程和一般的進程有什么區別?
進程池中的Queue:
- 如果要使用進程池創建進程,就需要使用
multiprocessing.Manager()
中的Queue()
,而不是multiprocessing.Queue()
。 - 使用的方法是一樣的,都已經成功了,再用q.put()添加、q.get()等待獲取。
原文鏈接:https://blog.csdn.net/weixin_46931877/article/details/123849788
相關推薦
- 2022-09-05 SparkStreaming寫入Hive慢
- 2022-05-03 python中的map函數語法詳解_python
- 2022-06-16 Golang?rabbitMQ生產者消費者實現示例_Golang
- 2022-09-27 OpenCV中findContours函數參數詳解_C 語言
- 2022-09-19 教你使用Python從文件中提取IP地址_python
- 2022-08-04 docker安裝elastic?search的詳細過程_docker
- 2022-04-28 Python語言中的數據類型-序列_python
- 2022-03-03 text-overflow:ellipsis,當對象內文本溢出時顯示省略標記(...)
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支