【问题标题】:Too Many Open Files Parallel Python Subprocess error太多打开的文件并行 Python 子进程错误
【发布时间】:2012-12-20 08:51:07
【问题描述】:

有类似问题的问题: Parallel Python - too many files 和 Python too many open files (subprocesses)

我正在使用 Parallel Python [V1.6.2] 来运行任务。该任务处理输入文件并输出日志/报告。假设有10个文件夹,每个文件夹有5000~20000个文件,并行读取、处理和写出日志。每个文件大约 50KB ~ 250KB

运行约 6 小时后,Parallel Python 失败并出现以下错误。

  File "/usr/local/lib/python2.7/dist-packages/pp-1.6.2-py2.7.egg/pp.py", line 342, in __init__
  File "/usr/local/lib/python2.7/dist-packages/pp-1.6.2-py2.7.egg/pp.py", line 506, in set_ncpus
  File "/usr/local/lib/python2.7/dist-packages/pp-1.6.2-py2.7.egg/pp.py", line 140, in __init__
  File "/usr/local/lib/python2.7/dist-packages/pp-1.6.2-py2.7.egg/pp.py", line 146, in start
  File "/usr/lib/python2.7/subprocess.py", line 679, in __init__
  File "/usr/lib/python2.7/subprocess.py", line 1135, in _execute_child
  File "/usr/lib/python2.7/subprocess.py", line 1091, in pipe_cloexec
OSError: [Errno 24] Too many open files
Error in sys.excepthook:
Traceback (most recent call last):
  File "/usr/lib/python2.7/dist-packages/apport_python_hook.py", line 66, in  apport_excepthook
ImportError: No module named fileutils

Original exception was:
Traceback (most recent call last):
  File "PARALLEL_TEST.py", line 746, in <module>
  File "/usr/local/lib/python2.7/dist-packages/pp-1.6.2-py2.7.egg/pp.py", line 342, in __init__
  File "/usr/local/lib/python2.7/dist-packages/pp-1.6.2-py2.7.egg/pp.py", line 506, in set_ncpus
  File "/usr/local/lib/python2.7/dist-packages/pp-1.6.2-py2.7.egg/pp.py", line 140, in __init__
  File "/usr/local/lib/python2.7/dist-packages/pp-1.6.2-py2.7.egg/pp.py", line 146, in start
  File "/usr/lib/python2.7/subprocess.py", line 679, in __init__
  File "/usr/lib/python2.7/subprocess.py", line 1135, in _execute_child
  File "/usr/lib/python2.7/subprocess.py", line 1091, in pipe_cloexec
OSError: [Errno 24] Too many open files

虽然我理解,这可能是此处http://bugs.python.org/issue2320 指出的子进程中的问题,但是,该解决方案似乎只是 Py V3.2 的一部分。我目前绑定到 Py V2.7。

我想知道以下建议是否有帮助: [1]http://www.parallelpython.com/component/option,com_smf/Itemid,1/topic,313.0

*) 在/usr/local/lib/python2.7/dist-packages/pp-1.6.2-py2.7.egg/pp.py的destroy()方法中添加worker.t.close()

*) 在 /usr/local/lib/python2.7/dist-packages/pp-1.6.2-py2.7.egg/ppauto.py 中增加 BROADCAST_INTERVAL

我想知道 Python V2.7 中是否有可用的修复/解决方法。

提前致谢

【问题讨论】:

  • 我已经离开了一些线路来破坏作业服务器。 job_server.destroy() 解决了这个问题。

标签: python subprocess parallel-python


【解决方案1】:

我的团队最近在运行 celeryd 任务队列作业时偶然发现了一个类似的问题,即相同的文件句柄资源耗尽问题。我相信 OP 已经搞定了,它很可能是 Python 2.7 和 Python 3.1 中 suprocess.py 库中的混乱代码。

如Python Bug#2320 中的建议,请在调用 subprocess.Popen() 的任何地方传入 close_fds=True。事实上,他们在 Python 3.2 中将其作为默认设置,同时还修复了潜在的竞争条件问题。在该票证中查看更多详细信息。

【讨论】:

    【解决方案2】:

    我已经离开了一些线路来破坏作业服务器。 job_server.destroy() 解决了这个问题。

    【讨论】:

      猜你喜欢
      • 2013-05-07
      • 2021-12-14
      • 2017-03-06
      • 2013-05-03
      • 1970-01-01
      • 1970-01-01
      • 2014-10-03
      • 2010-12-07
      相关资源
      最近更新 更多