如何在 python 中使用带有队列的工作池?
How to use a Pool of Workers with a Queue in python?
我目前正在尝试使用多处理设置参数研究,但我不明白如何使用队列将结果返回到主进程。
有人可以帮忙告诉我,为什么我的例子不起作用吗?
import numpy as np
import multiprocessing as mp
from queue import Empty
def run(q1):
q1.put({'val':np.random.random(), 'ErrFlag':False})
if __name__ == '__main__':
q = mp.Queue()
pool = mp.Pool(processes = 10)
results = []
for i in range(50):
pool.apply_async(run, (q,))
pool.close()
pool.join()
while True:
try:
res = q.get(timeout = 1)
results.append(res['val'])
except Empty:
break
print(f'result: {repr(np.array(results))}\n')
执行此操作时,我只得到一个空数组。
这是 Sharing a result queue among several processes
的副本
您应该使用管理器让不同的工作人员可以访问您的队列:
pool = mp.Pool(processes=10)
m = mp.Manager()
q = m.Queue()
我目前正在尝试使用多处理设置参数研究,但我不明白如何使用队列将结果返回到主进程。
有人可以帮忙告诉我,为什么我的例子不起作用吗?
import numpy as np
import multiprocessing as mp
from queue import Empty
def run(q1):
q1.put({'val':np.random.random(), 'ErrFlag':False})
if __name__ == '__main__':
q = mp.Queue()
pool = mp.Pool(processes = 10)
results = []
for i in range(50):
pool.apply_async(run, (q,))
pool.close()
pool.join()
while True:
try:
res = q.get(timeout = 1)
results.append(res['val'])
except Empty:
break
print(f'result: {repr(np.array(results))}\n')
执行此操作时,我只得到一个空数组。
这是 Sharing a result queue among several processes
的副本您应该使用管理器让不同的工作人员可以访问您的队列:
pool = mp.Pool(processes=10)
m = mp.Manager()
q = m.Queue()