程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 更多關於編程 >> Python多進程並發(multiprocessing)用法實例詳解

Python多進程並發(multiprocessing)用法實例詳解

編輯:更多關於編程

       本文實例講述了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程序設計有所幫助。

    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved