python進(jìn)程池Pool的apply與apply_async到底怎么用?

背景

最近在解決問題的時候遇到了上下文沖突的問題,不得不用多進(jìn)程來解決這個問題。這個問題是StackOverflow沒有完整答案的問題,下一篇博客進(jìn)行介紹。

多進(jìn)程

python中使用multiprocessing模塊實(shí)現(xiàn)多進(jìn)程。multiprocessing模塊提供了一個Process類來代表一個進(jìn)程對象,這個模塊表示像線程一樣管理進(jìn)程,是multiprocessing的核心,它與threading很相似,對多核CPU的利用率會比threading好的多。

Pool類

Pool類可以提供指定數(shù)量的進(jìn)程供用戶調(diào)用,當(dāng)有新的請求提交到Pool中時,如果池還沒有滿,就會創(chuàng)建一個新的進(jìn)程來執(zhí)行請求。如果池滿,請求就會告知先等待,直到池中有進(jìn)程結(jié)束,才會創(chuàng)建新的進(jìn)程來執(zhí)行這些請求。

Signature: Pool(processes=None, initializer=None, initargs=(), maxtasksperchild=None)
Docstring: Returns a process pool object
File:      /usr/lib/python3.5/multiprocessing/context.py
Type:      method

Pool 中提供了如下幾個方法:

apply()
apply_async()
map()
map_async()
close()
terminal()
join()

這里主要說一下apply和apply_async兩個,其他的內(nèi)容可以進(jìn)行百度搜索

apply
Signature: pool.apply(func, args=(), kwds={})
Docstring: Equivalent of `func(*args, **kwds)`.
File:      /usr/lib/python3.5/multiprocessing/pool.py
Type:      method

apply函數(shù)主要用于傳遞不定參數(shù),主進(jìn)程會被阻塞到函數(shù)執(zhí)行結(jié)束。也就是說只有apply里面的內(nèi)容被執(zhí)行完了,才會進(jìn)行執(zhí)行主函數(shù)的內(nèi)容。


在這里插入圖片描述
apply_async
Signature: pool.apply_async(func, args=(), kwds={}, callback=None, error_callback=None)
Docstring: Asynchronous version of `apply()` method.
File:      /usr/lib/python3.5/multiprocessing/pool.py
Type:      method
在這里插入圖片描述
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容