本文實(shí)例講述了Python多進(jìn)程并發(fā)(multiprocessing)用法。分享給大家供大家參考。具體分析如下:
由于Python設(shè)計(jì)的限制(我說(shuō)的是咱們常用的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 multiprocessingimport timedef 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)程池
是的,你沒(méi)有看錯(cuò),不是線程池。它可以讓你跑滿多核CPU,而且使用方法非常簡(jiǎn)單。
注意要用apply_async,如果落下async,就變成阻塞版本了。
processes=4是最多并發(fā)進(jìn)程數(shù)量。
import multiprocessingimport timedef 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 multiprocessingimport timedef func(msg): for i in xrange(3): print msg time.sleep(1) return "done " + msgif __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."
希望本文所述對(duì)大家的Python程序設(shè)計(jì)有所幫助。
新聞熱點(diǎn)
疑難解答
圖片精選