6

upstartで起動された、長時間実行されるpythonスクリプトがあります。このスクリプトは非常に多くのリクエストを行います。最初はすべてうまくいきますが、数時間後、リクエストごとに次のエラーが永続的に発生し始めます。

  File "/opt/a/a-env/local/lib/python2.7/site-packages/atom/client.py", line 119, in request
  File "/opt/a/a-env/local/lib/python2.7/site-packages/atom/http_core.py", line 420, in request
  File "/opt/a/a-env/local/lib/python2.7/site-packages/atom/http_core.py", line 489, in _http_request
  File "/usr/lib/python2.7/httplib.py", line 931, in endheaders
  File "/usr/lib/python2.7/httplib.py", line 794, in _send_output
  File "/usr/lib/python2.7/httplib.py", line 756, in send
  File "/usr/lib/python2.7/httplib.py", line 1134, in connect
  File "/usr/lib/python2.7/socket.py", line 553, in create_connection
gaierror: [Errno -3] Temporary failure in name resolution

アプリケーションを再起動するだけで問題が解決するため、これは名前解決や DNS の問題ではありません。

Python 2.6 と 2.7 の両方を試しましたが、同じ状況が発生します。

私は走っていますLinux 2.6.35-30-virtual #61-Ubuntu SMP Tue Oct 11 18:26:36 UTC 2011 x86_64 GNU/Linux

この問題に関する投稿はいくつかありますが、簡単な説明や解決策はありません。

4

2 に答える 2

1

これは、「開いているファイルが多すぎる」状態になったときに発生すると思います。次回これが発生したときは、スクリプトが開いているファイル記述子の数を確認してください。

于 2012-06-22T14:21:31.893 に答える
0

根本的な原因は、/etc/resolv.conf が Python の起動時にのみ読み取られることです。解決テーブルを強制的に更新するには、これを実行できます (Linux の場合):

import ctypes
libc = ctypes.cdll.LoadLibrary('libc.so.6')
res_init = libc.__res_init
res_init()
于 2016-05-23T21:56:50.290 に答える