python MultiProcessing標准庫使用Queue通信的注意要點


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

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啟動子進程失敗問題

后來在官網仔細找了下,發現:

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM