В настоящее время я пытаюсь настроить исследование параметров с многопроцессорной обработкой, но я точно не понимаю, как использовать очередь для возврата результатов в основной процесс.
Может кто-нибудь помочь и сказать мне, почему мой пример не работает?
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')
При выполнении этого я получаю только пустой массив.
Это дубликат Разделение очереди результатов между несколькими процессами
Вы должны использовать менеджер, чтобы сделать вашу очередь доступной для разных рабочих:
pool = mp.Pool(processes=10)
m = mp.Manager()
q = m.Queue()
Спасибо за быстрый ответ.