我认为我在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”, _exit_function中的第322行 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:只能加入子进程
答案 0 :(得分:1)
您使用哪个PyCharm版本?这似乎已在https://youtrack.jetbrains.com/issue/PY-34436
中于2019.1.2中修复。