Python多進(jìn)程并發(fā)(multiprocessing)用法實(shí)例詳解
本文實(shí)例講述了Python多進(jìn)程并發(fā)(multiprocessing)用法。分享給大家供大家參考。具體分析如下:
由于Python設(shè)計(jì)的限制(我說的是咱們常用的CPython)。最多只能用滿1個(gè)CPU核心。
Python提供了非常好用的多進(jìn)程包multiprocessing,你只需要定義一個(gè)函數(shù),Python會(huì)替你完成其他所有事情。借助這個(gè)包,可以輕松完成從單進(jìn)程到并發(fā)執(zhí)行的轉(zhuǎn)換。
1、新建單一進(jìn)程
如果我們新建少量進(jìn)程,可以如下:
import multiprocessing import time def func(msg): for i in xrange(3): print msg time.sleep(1) if __name__ == "__main__": p = multiprocessing.Process(target=func, args=("hello", )) p.start() p.join() print "Sub-process done."
2、使用進(jìn)程池
是的,你沒有看錯(cuò),不是線程池。它可以讓你跑滿多核CPU,而且使用方法非常簡單。
注意要用apply_async,如果落下async,就變成阻塞版本了。
processes=4是最多并發(fā)進(jìn)程數(shù)量。
import multiprocessing import time def func(msg): for i in xrange(3): print msg time.sleep(1) if __name__ == "__main__": pool = multiprocessing.Pool(processes=4) for i in xrange(10): msg = "hello %d" %(i) pool.apply_async(func, (msg, )) pool.close() pool.join() print "Sub-process(es) done."
3、使用Pool,并需要關(guān)注結(jié)果
更多的時(shí)候,我們不僅需要多進(jìn)程執(zhí)行,還需要關(guān)注每個(gè)進(jìn)程的執(zhí)行結(jié)果,如下:
import multiprocessing import time def func(msg): for i in xrange(3): print msg time.sleep(1) return "done " + msg if __name__ == "__main__": pool = multiprocessing.Pool(processes=4) result = [] for i in xrange(10): msg = "hello %d" %(i) result.append(pool.apply_async(func, (msg, ))) pool.close() pool.join() for res in result: print res.get() print "Sub-process(es) done."
希望本文所述對大家的Python程序設(shè)計(jì)有所幫助。
- Python3多進(jìn)程 multiprocessing 模塊實(shí)例詳解
- Python多進(jìn)程multiprocessing用法實(shí)例分析
- python multiprocessing多進(jìn)程變量共享與加鎖的實(shí)現(xiàn)
- Python標(biāo)準(zhǔn)庫之多進(jìn)程(multiprocessing包)介紹
- python基于multiprocessing的多進(jìn)程創(chuàng)建方法
- python multiprocessing 多進(jìn)程并行計(jì)算的操作
- 簡單學(xué)習(xí)Python多進(jìn)程Multiprocessing
- Python使用multiprocessing實(shí)現(xiàn)多進(jìn)程的詳細(xì)步驟記錄
相關(guān)文章
Python基于pywinauto實(shí)現(xiàn)的自動(dòng)化采集任務(wù)
這篇文章主要介紹了Python基于pywinauto實(shí)現(xiàn)的自動(dòng)化采集任務(wù),模擬了輸入單詞, 復(fù)制例句, 獲取例句, 清空剪切板, 然后重復(fù)這個(gè)操作,需要的朋友可以參考下2023-04-04Python繪制計(jì)算機(jī)CPU占有率變化的折線圖
這篇文章主要為大家詳細(xì)介紹了Python繪制計(jì)算機(jī)CPU占有率變化的折線圖,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03淺談Python中range與Numpy中arange的比較
這篇文章主要介紹了淺談Python中range與Numpy中arange的比較,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-03-03python爬蟲爬取監(jiān)控教務(wù)系統(tǒng)的思路詳解
這篇文章主要介紹了python爬蟲監(jiān)控教務(wù)系統(tǒng),主要實(shí)現(xiàn)思路是對已有的成績進(jìn)行處理,變?yōu)閘ist集合,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2020-01-01pandas.read_csv參數(shù)詳解(小結(jié))
這篇文章主要介紹了pandas.read_csv參數(shù)詳解(小結(jié)),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-06-06pytorch中dataloader 的sampler 參數(shù)詳解
這篇文章主要介紹了pytorch中dataloader 的sampler 參數(shù)詳解,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,感興趣的小伙伴可以參考一下2022-09-09Python 3.8中實(shí)現(xiàn)functools.cached_property功能
這篇文章主要介紹了Python 3.8中實(shí)現(xiàn)functools.cached_property功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-05-05