Python多处理OSError甚至在终止进程时

时间:2017-12-05 18:15:28

标签: python multiprocessing

我正在运行一个大型应用程序,它会生成然后有时会破坏多处理池。即使池中的进程正在处理任务,我有时也会被迫按需销毁这些池。为此,我使用了close,terminate和join的组合。

pool.close()
pool.terminate()
pool.join()

我看到,如果在我调用这一系列命令时池实际上正忙着工作,那么这些进程实际上并未被杀死。最终,这导致OSError导致过多的打开文件,因为这些过程没有得到正确清理:

File "python3.5/multiprocessing/popen_fork.py", line 66, in _launch
   parent_r, child_w = os.pipe()
OSError: [Errno 24] Too many open files

我将多处理DEBUG输出记录到附加的stderr。我在OSX上运行。有没有人有任何想法?我的印象是终止始终会终止池中的所有进程并释放其操作系统资源。

日志输出:https://pastebin.com/raw/uXP3XusY

更新:我确定了一个发送到池中的任务,如果已删除,则修复了该问题。不幸的是,我没有看到任何异常会导致此特定任务导致池无法妥善处理。即使我等待相关任务通过在ApplyResult上调用.get()来完成,问题仍然存在。

0 个答案:

没有答案