1

同様の問題に関する質問: Parallel Python - too many files and Python too many open files (サブプロセス)

Parallel Python [V1.6.2] を使用してタスクを実行しています。タスクは入力ファイルを処理し、ログ/レポートを出力します。たとえば、それぞれ 5000 ~ 20000 個のファイルを含む 10 個のフォルダーがあり、これらのファイルは並行して読み取られ、処理され、ログが書き出されます。1ファイルあたり約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 でこの問題の修正/回避策があるかどうかを知りたいです。

前もって感謝します

4

2 に答える 2

1

私のチームは最近、celeryd タスク キュー ジョブの実行中に、同じファイル ハンドル リソースの枯渇の問題を伴う同様の問題に遭遇しました。私はOPがそれを釘付けにしたと信じており、Python 2.7およびPython 3.1のsuprocess.py libの厄介なコードである可能性が最も高いです。

Python Bug#2320で提案されているように、close_fds=Truesubprocess.Popen() を呼び出すすべての場所で渡してください。実際、彼らはそれを Python 3.2 のデフォルトにし、根本的な競合状態の問題も修正しています。詳細については、そのチケットをご覧ください。

于 2013-08-28T17:09:41.950 に答える
0

ジョブ サーバーを破壊するために、いくつかの行を残しておきました。job_server.destroy() は問題を修正します。

于 2012-12-24T05:10:50.057 に答える