【发布时间】:2019-11-12 03:41:13
【问题描述】:
我认为我在 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: 只能加入子进程
【问题讨论】:
-
你调试的怎么样了?你在使用python调试器吗? (pdb)
-
@dm03514 抱歉,我将其标记为 PyCharm,但未在问题中指定。已更新。
标签: python pycharm python-multiprocessing