2011-12-26 4 views
6

私は長い起動Pythonスクリプトをupstartで起動しています。このスクリプトは非常に多くの要求をします。すべてが最初はうまく動作しますが、しかし、私は永久に要求ごとに、次のエラーを取得開始数時間後:恒久的なgaierror数時間実行した後の「名前解決の一時的な失敗」

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

実行しています:

答えて

1

Iをこれは、あなたが「あまりにも多くのファイルを開く」状態になったときに起こると思う。次回このときに、スクリプトが開いているファイルディスクリプタの数を確認してみてください。

+0

は最近、それを取得され、システム全体のみ394のファイルディスクリプタのオープン( 'lsofを|トイレ-l')。 – Endophage

0

根本的な原因は、/etc/resolv.confがpythonの起動時にのみ読み込まれることです。解決テーブルの更新を強制するために、あなたは(Linux上)これを実行することができます。

import ctypes 
libc = ctypes.cdll.LoadLibrary('libc.so.6') 
res_init = libc.__res_init 
res_init() 
+0

複数の質問に同じ回答を投稿しないでください。同じ情報が両方の質問に本当に答えると、ある質問(通常は新しい質問)はもう一方の質問の複製として閉じられるべきです。これを[重複して閉じるために投票する](http://stackoverflow.com/help/privileges/close-questions)、または十分な評判がない場合は[フラグを立てる]( http://stackoverflow.com/help/privileges/flag-posts)を使用して、重複していることを示します。それ以外の場合は、* this *の質問への回答を調整し、複数の場所に同じ答えを貼り付けるだけではありません。 –

関連する問題