Я не думаю, что столкнулся с этой проблемой, работая над этим в Python 2.7, но при отладке в 3.7 Python выдает исключение при вызове pool.close()
. Это соответствующая часть функции:
pool = multiprocessing.Pool(6)
iterator = pool.imap_unordered(worker_func, worker_input)
while True:
try:
t0, t1 = next(iterator)
except multiprocessing.TimeoutError:
continue
except StopIteration:
break
else:
dbinserts1(t0)
dbinserts2(t1)
pool.close()
pool.join()
Единственное изменение, сделанное 2to3
, переписывало iterator.next()
как next(iterator)
. Функция завершается ошибкой только во время отладки (в PyCharm), в противном случае она работает успешно. Это (вероятно) наиболее значимая часть трассировки стека:
Ошибка в atexit._run_exitfuncs: трассировка (последний последний вызов):
файл
"/Usr/local/Cellar/python/3.7.3/Frameworks/Python.framework/Versions/3.7/lib/python3.7/multiprocessing/util.py",
строка 322, в _exit_function
Файл p.join () "/usr/local/Cellar/python/3.7.3/Frameworks/Python.framework/Versions/3.7/lib/python3.7/multiprocessing/process.py",
строка 138, в соединении
assert self._parent_pid == os.getpid (), 'может присоединиться только к дочернему процессу'
AssertionError: может присоединиться только к дочернему процессу