Я пытаюсь перенести некоторый код из Python 3.6 в Python 3.7 в Windows 10. Я вижу, что многопроцессорный код зависает при вызове .get()
для объекта AsyncResult
.Код, о котором идет речь, гораздо сложнее, но я свел его к чему-то похожему на следующую программу:
import multiprocessing
def main(num_jobs):
num_processes = max(multiprocessing.cpu_count() - 1, 1)
pool = multiprocessing.Pool(num_processes)
func_args = []
results = []
try:
for num in range(num_jobs):
args = (1, 2, 3)
func_args.append(args)
results.append(pool.apply_async(print, args))
for result, args in zip(results, func_args):
print('waiting on', args)
result.get()
finally:
pool.terminate()
pool.join()
if __name__ == '__main__':
main(5)
Этот код также работает в Python 2.7.По какой-то причине первый вызов get()
зависает в 3.7, но в других версиях все работает как положено.