1 回答

TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超5個(gè)贊
我已經(jīng)知道我做錯(cuò)了什么了。問(wèn)題是池工作線程無(wú)法獲取produce()和中指定的參數(shù)consume()。每個(gè)都需要三個(gè)參數(shù)。但是,producerDetails列表會(huì)作為子列表中的一個(gè)而不是三個(gè)單獨(dú)的參數(shù)consumerDetails直接傳遞到映射列表。Pool.apply_async()
為此,有Pool.starmap()一些Pool.starmap_async()函數(shù)可以正確接受當(dāng)前列表和地圖參數(shù)。
如果有人不明白我上面的意思,這里是 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()
添加回答
舉報(bào)