У меня проблемы с многопроцессорной обработкой Python
Python версии 3.6.6
с использованием Spyder IDE в Windows 7
1.
очередь не выполняетсязаполненный -> каждый раз, когда я пытаюсь прочитать его, он пуст.Где-то я читал, что я должен получить () его до процесса join (), но он не решил его.
from multiprocessing import Process,Queue
# define a example function
def fnc(i, output):
output.put(i)
if __name__ == '__main__':
# Define an output queue
output = Queue()
# Setup a list of processes that we want to run
processes = [Process(target=fnc, args=(i, output)) for i in range(4)]
print('created')
# Run processes
for p in processes:
p.start()
print('started')
# Exit the completed processes
for p in processes:
p.join()
print(output.empty())
print('finished')
>>>created
>>>started
>>>True
>>>finished
Я ожидал бы, что вывод не будет пустым.
, если яизмените его с .join () на
for p in processes:
print(output.get())
#p.join()
он зависает
2.
Следующая проблема у меня с pool.map () - он зависает и не имеетшанс превысить лимит памяти.Я даже не знаю, как отлаживать такой простой кусок кода.
from multiprocessing import Pool
def f(x):
return x*x
if __name__ == '__main__':
pool = Pool(processes=4)
print('Pool created')
# print "[0, 1, 4,..., 81]"
print(pool.map(f, range(10))) # it freezes here
Надеюсь, не так уж и сложно иметь два вопроса в одной теме