python(32):多進程 multiprocessing

來源:互聯網
上載者:User

標籤:nbsp   desktop   lan   多核   檔案   版本   dmi   style   alt   

python 多線程:多線程

由於Python設計的限制(我說的是咱們常用的CPython)。最多隻能用滿1個CPU核心。
Python提供了非常好用的多進程包multiprocessing,你只需要定義一個函數,Python會替你完成其他所有事情。藉助這個包,可以輕鬆完成從單進程到並發執行的轉換。

1、建立單一進程

如果我們建立少量進程,可以如下:

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、使用進程池

是的,你沒有看錯,不是線程池。它可以讓你跑滿多核CPU,而且使用方法非常簡單。

注意要用apply_async,如果落下async,就變成阻塞版本了。

processes=10是最多並發進程數量。代碼如下,能同時看到10個檔案在同時進行寫入。

# /usr/bin/env python# coding=utf8import multiprocessingimport timepath = "C:\\Users\\admin.95BNQ4GMHNOZBFR\\Desktop\\linshi\\test\\"num = 0def func(msg,k):    print msg    # for i in xrange(3):    for j in range(5000):        ff = open(path + str(k) + ".txt","a")        ff.write("mmmmm" + "\n")        ff.close()    # time.sleep()if __name__ == "__main__":  pool = multiprocessing.Pool(processes=10) #同時跑十個進程  for i in xrange(100):  #先把這100個跑完,然後每次跑其中的十個      msg = "hello %d" % (i)      print msg + "---"      pool.apply_async(func, (msg,i))  pool.close()  pool.join()  print "Sub-process done."

 運行結果:可以看出把100個任務送進進程池中,然後每次從中取10個

3、使用Pool,並需要關注結果

更多的時候,我們不僅需要多進程執行,還需要關注每個進程的執行結果,如下:

# /usr/bin/env python# coding=utf8import multiprocessingimport timepath = "C:\\Users\\admin.95BNQ4GMHNOZBFR\\Desktop\\linshi\\test\\"num = 0def func(msg, k):    print "||" + msg    # for i in xrange(3):    for j in range(3000):        ff = open(path + str(k) + ".txt", "a")        ff.write("mmmmm" + "\n")        ff.close()    return "the " + str(k) + " have done"   # 返回已經完成的狀態if __name__ == "__main__":    pool = multiprocessing.Pool(processes=4)  # 同時跑十個進程    result = []    for i in xrange(10):  # 先把這100個跑完,然後每次跑其中的十個        msg = "hello %d" % (i)        print msg + "---"        result.append( pool.apply_async(func, (msg, i)))    pool.close()    pool.join()    for res in result: #進程池中的任務結束後,輸出完成的狀態        print res.get()    print "Sub-process done."

 

 

 

python(32):多進程 multiprocessing

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.