日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

Python進程池基本概念_python

作者:蘇州程序大白 ? 更新時間: 2022-06-02 編程語言

前言:

創建進程池可以形象地理解為創建一個并行的流水線,只需創建一次流水線的消耗,處理接收到的任務的,不使用進程池。 ,浪費時間。

中方本來沒有進程的,除了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

欄目分類
最近更新