亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

多處理程序(生產者-消費者)退出而不打印任何內容 Python 3

多處理程序(生產者-消費者)退出而不打印任何內容 Python 3

慕的地6264312 2023-08-08 16:47:32
我正在嘗試創建共享隊列,從中獲取任務以執行并推送執行。但是,程序不會打印任何內容并以代碼 0 退出。我正在使用 python 3.6 并嘗試了我在互聯網上找到的所有內容,但它不起作用。也許我錯過了什么或者做錯了什么。請指出正確的方向。import multiprocessing as mpimport timedef produce(i, rate, taskQue):    print("+++ Producer:%s +++" % i)    time.sleep(0.01)    for r in range(rate):        taskQue.put(0)    time.sleep(1)def consume(i, rate, taskQue):    print("--- Consumer:%s ---" % i)    for r in range(rate):        while taskQue.empty():            print("| Consumer:%s ..." % i)            time.sleep(0.5)        time.sleep(0.01)        taskQue.get()    time.sleep(1)if __name__ == '__main__':    manager = mp.Manager()    taskQue = manager.Queue()    producerDetails = [[1, 5, taskQue], [2, 7, taskQue], [3, 2, taskQue], [4, 3, taskQue]]    producerPool = mp.Pool(processes=5)    produced = producerPool.apply_async(produce, producerDetails)    consumerDetails = [[1, 5, taskQue], [2, 5, taskQue], [3, 3, taskQue], [4, 5, taskQue]]    consumerPool = mp.Pool(processes=5)    consumed = consumerPool.apply_async(consume, consumerDetails)    producerPool.close()    producerPool.join()    consumerPool.close()    consumerPool.join()
查看完整描述

1 回答

?
一只甜甜圈

TA貢獻1836條經驗 獲得超5個贊

我已經知道我做錯了什么了。問題是池工作線程無法獲取produce()和中指定的參數consume()。每個都需要三個參數。但是,producerDetails列表會作為子列表中的一個而不是三個單獨的參數consumerDetails直接傳遞到映射列表。Pool.apply_async()


為此,有Pool.starmap()一些Pool.starmap_async()函數可以正確接受當前列表和地圖參數。


如果有人不明白我上面的意思,這里是 Python 3.6 中的工作代碼


import multiprocessing as mp

import time



def produce(i, rate, taskQue):

    for r in range(rate):

        print("+++ Producer:%s +++" % i)

        time.sleep(i * 0.01)

        taskQue.put(0)

    time.sleep(1)



def consume(i, rate, taskQue):

    for r in range(rate):

        while taskQue.empty():

            print("| Consumer:%s ..." % i)

            time.sleep(0.5)

        print("--- Consumer:%s ---" % i)

        time.sleep(i*0.01)

        taskQue.get()

    time.sleep(1)


if __name__ == '__main__':

    manager = mp.Manager()

    taskQue = manager.Queue()


    producerDetails = [[1, 5, taskQue], [2, 7, taskQue], [3, 2, taskQue], [4, 3, taskQue]]*50     

    producerPool = mp.Pool(processes=20)


    consumerDetails = [[1, 5, taskQue], [2, 5, taskQue], [3, 3, taskQue], [4, 5, taskQue]]*50

    consumerPool = mp.Pool(processes=20)


    produced = producerPool.starmap_async(produce, producerDetails)

    consumed = consumerPool.starmap_async(consume, consumerDetails)


    producerPool.close()

    producerPool.join()

    consumerPool.close()

    consumerPool.join()



查看完整回答
反對 回復 2023-08-08
  • 1 回答
  • 0 關注
  • 123 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號