python MultiProcessing標準庫使用Queue通訊的注意要點

今天本來想研究下MultiProcessing標準庫下的進程間通訊,根據 MultiProcessing官網 給的提示,有兩種方法可以來實現進程間的通訊,分別是pipe和queue。由於看queue順眼,就想着拿queue實現,後來,被坑了....因而有了這篇文章。
我按照 python標準庫之MultiProcessing庫的研究 (1) 裏面的代碼來的,結果就是不斷的出錯,死過就是不出結果,看看程序:html

from multiprocessing import Pool, queues
import os


def func(msg, q):
    q.put([msg, None, 'hello'])
    print(os.getpid())


if __name__ == '__main__':
    q = queues.Queue()
    pool = Pool(4)
    for i in range(4):
        pool.apply_async(func, (i, q, ))
    print("Mark~ Mark~ Mark~~~~~~~~~~~~~~~~~~~~~~")
    print(q.qsize())
    pool.close()
    pool.join()   # 調用join以前,先調用close函數,不然會出錯。執行完close後不會有新的進程加入到pool,join函數等待全部子進程結束
    for i in range(q.qsize()):
        print(q.get())

其實沒什麼,就是在apply_async函數中加了個Queue對象而已。
但是死活就是不行。後來查了這篇文章 python多進程編程:使用Queue,Pool啓動子進程失敗問題python

後來在官網仔細找了下,發現:
編程

so,就是我須要再加上一個manager,趕明再試試...app

相關文章
相關標籤/搜索