您好,登錄后才能下訂單哦!
這篇文章主要介紹“Python進(jìn)程池基本概念是什么”的相關(guān)知識(shí),小編通過實(shí)際案例向大家展示操作過程,操作方法簡(jiǎn)單快捷,實(shí)用性強(qiáng),希望這篇“Python進(jìn)程池基本概念是什么”文章能幫助大家解決問題。
前言:
創(chuàng)建進(jìn)程池可以形象地理解為創(chuàng)建一個(gè)并行的流水線,只需創(chuàng)建一次流水線的消耗,處理接收到的任務(wù)的,不使用進(jìn)程池。 ,浪費(fèi)時(shí)間。
中方本來沒有進(jìn)程的,除了python
的,使用線程池的語言,是進(jìn)程的其他線程池(而進(jìn)程是執(zhí)行業(yè)務(wù)的其他任務(wù))。python的原因(因?yàn)镃ython的概念),線程編程不同的并行,把線程池的概念轉(zhuǎn)移到了進(jìn)程中,命名為進(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í)
如果池還沒有滿,那么就用創(chuàng)建一個(gè)新進(jìn)程的執(zhí)行該請(qǐng)求;
如果池中的進(jìn)程達(dá)到指定的任務(wù),那么已經(jīng)有多少時(shí)間,直到有進(jìn)程結(jié)束,會(huì)用之前的請(qǐng)求進(jìn)程來執(zhí)行新的任務(wù)。
函數(shù)原型:apply (func, args=()[, kwds={}]])
該函數(shù)傳遞不定參數(shù),同 python 中的應(yīng)用函數(shù)一致,主進(jìn)程會(huì)被阻止函數(shù)執(zhí)行結(jié)束(不建議使用,并且 3.x 以后不再出現(xiàn)使用)
函數(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)程。
函數(shù)原型:map_async(func, iterable[, chunksize[, callback]])
與地圖匹配一致,但它是非阻尼的。
關(guān)閉進(jìn)程池(pool
),不再接受新的任務(wù)。
結(jié)束工作進(jìn)程,不再處理未處理的任務(wù)。
主進(jìn)程停止等待子進(jìn)程的退出,加入方法要在關(guān)閉或終止使用之后。
# 導(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)程池中的Queue:
如果要使用進(jìn)程池創(chuàng)建進(jìn)程,就需要使用multiprocessing.Manager()
中的Queue()
,而不是multiprocessing.Queue()
。
使用的方法是一樣的,都已經(jīng)成功了,再用q.put()添加、q.get()等待獲取。
關(guān)于“Python進(jìn)程池基本概念是什么”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí),可以關(guān)注億速云行業(yè)資訊頻道,小編每天都會(huì)為大家更新不同的知識(shí)點(diǎn)。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。