调试时在pool.close()上抛出异常,但运行时则没有异常

时间:2019-04-30 22:43:27

标签: python pycharm python-multiprocessing

我认为我在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:只能加入子进程

1 个答案:

答案 0 :(得分:1)

您使用哪个PyCharm版本?这似乎已在https://youtrack.jetbrains.com/issue/PY-34436

中于2019.1.2中修复。