本文實例講述了Python多進程并發(multiprocessing)用法。分享給大家供大家參考。具體分析如下:
由于Python設計的限制(我說的是咱們常用的CPython)。最多只能用滿1個CPU核心。
Python提供了非常好用的多進程包multiprocessing,你只需要定義一個函數,Python會替你完成其他所有事情。借助這個包,可以輕松完成從單進程到并發執行的轉換。
1、新建單一進程
如果我們新建少量進程,可以如下:
1
2
3
4
5
6
7
8
9
10
11
|
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、使用進程池
是的,你沒有看錯,不是線程池。它可以讓你跑滿多核CPU,而且使用方法非常簡單。
注意要用apply_async,如果落下async,就變成阻塞版本了。
processes=4是最多并發進程數量。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
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,并需要關注結果
更多的時候,我們不僅需要多進程執行,還需要關注每個進程的執行結果,如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
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程序設計有所幫助。