打开的文件太多并行Python子进程错误

打开的文件太多并行Python子进程错误,python,subprocess,parallel-python,Python,Subprocess,Parallel Python,类似问题: 及 我正在使用并行Python[V1.6.2]来运行任务。该任务处理输入文件并输出日志/报告。比如说,有10个文件夹,每个文件夹包含5000~20000个文件,这些文件被并行读取、处理并写出日志。每个文件的大小约为50KB~250KB 运行约6小时后,并行Python失败,出现以下错误 File "/usr/local/lib/python2.7/dist-packages/pp-1.6.2-py2.7.egg/pp.py", line 342, in __init__ Fi

类似问题: 及

我正在使用并行Python[V1.6.2]来运行任务。该任务处理输入文件并输出日志/报告。比如说,有10个文件夹,每个文件夹包含5000~20000个文件,这些文件被并行读取、处理并写出日志。每个文件的大小约为50KB~250KB

运行约6小时后,并行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
文件“/usr/local/lib/python2.7/dist-packages/pp-1.6.2-py2.7.egg/pp.py”,第342行,在__
文件“/usr/local/lib/python2.7/dist packages/pp-1.6.2-py2.7.egg/pp.py”,第506行,在set\u ncpus中
文件“/usr/local/lib/python2.7/dist packages/pp-1.6.2-py2.7.egg/pp.py”,第140行,在__
文件“/usr/local/lib/python2.7/dist-packages/pp-1.6.2-py2.7.egg/pp.py”,第146行,开头
文件“/usr/lib/python2.7/subprocess.py”,第679行,在__
文件“/usr/lib/python2.7/subprocess.py”,第1135行,在执行子进程中
文件“/usr/lib/python2.7/subprocess.py”,第1091行,在pipe\u cloexec中
OSError:[Errno 24]打开的文件太多
sys.excepthook中出错:
回溯(最近一次呼叫最后一次):
文件“/usr/lib/python2.7/dist packages/apport\u python\u hook.py”,第66行,apport\u excepthook中
ImportError:没有名为fileutils的模块
最初的例外是:
回溯(最近一次呼叫最后一次):
文件“PARALLEL_TEST.py”,第746行,在
文件“/usr/local/lib/python2.7/dist packages/pp-1.6.2-py2.7.egg/pp.py”,第342行,在__
文件“/usr/local/lib/python2.7/dist packages/pp-1.6.2-py2.7.egg/pp.py”,第506行,在set\u ncpus中
文件“/usr/local/lib/python2.7/dist packages/pp-1.6.2-py2.7.egg/pp.py”,第140行,在__
文件“/usr/local/lib/python2.7/dist-packages/pp-1.6.2-py2.7.egg/pp.py”,第146行,开头
文件“/usr/lib/python2.7/subprocess.py”,第679行,在__
文件“/usr/lib/python2.7/subprocess.py”,第1135行,在执行子进程中
文件“/usr/lib/python2.7/subprocess.py”,第1091行,在pipe\u cloexec中
OSError:[Errno 24]打开的文件太多
虽然我理解,这可能是这里指出的子流程中的问题,但是,解决方案似乎只是PyV3.2的一部分。我目前绑定到Py V2.7

我想知道以下建议是否有帮助: [1]

*)在/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中的广播间隔

我想知道在PythonV2.7中是否有针对这个问题的修复/解决方法


提前感谢

我留下几行电话来销毁作业服务器。job_server.destroy()修复了该问题

我已经离开了一些队伍去摧毁作业服务器。job_server.destroy()修复了该问题

我的团队最近在运行celeryd任务队列作业时遇到了一个类似的问题,即相同的文件句柄资源耗尽问题。我相信OP已经解决了这个问题,它很可能是Python2.7和Python3.1中supprocess.py lib中混乱的代码


如中所建议的,请在调用subprocess.Popen()的任何地方传入
close_fds=True
。事实上,他们在Python3.2中默认了这一点,同时也修复了底层的竞争条件问题。查看该记录单中的更多详细信息。

我的团队最近在运行celeryd任务队列作业时遇到了一个类似的问题,即相同的文件句柄资源耗尽问题。我相信OP已经解决了这个问题,它很可能是Python2.7和Python3.1中supprocess.py lib中混乱的代码


如中所建议的,请在调用subprocess.Popen()的任何地方传入
close_fds=True
。事实上,他们在Python3.2中默认了这一点,同时也修复了底层的竞争条件问题。查看该通知单中的更多详细信息。

我在一些线路上留下来销毁作业服务器。job_server.destroy()修复了这个问题。我留下了一些线路来销毁作业服务器。job_server.destroy()修复了该问题。