gpt4 book ai didi

python - 打开文件过多并行 Python 子进程错误

转载 作者:太空宇宙 更新时间:2023-11-03 19:08:10 25 4
gpt4 key购买 nike

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

我正在使用并行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

据我了解,这可能是此处指出的子流程中的问题 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()/p>

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

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

提前致谢

最佳答案

我的团队最近在运行 celeryd 任务队列作业时偶然发现了一个类似的问题,即相同的文件处理资源耗尽问题。我相信OP已经解决了这个问题,它很可能是Python 2.7和Python 3.1中suprocess.py lib中的困惑代码。

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

关于python - 打开文件过多并行 Python 子进程错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13968290/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com