2011-12-26 21 views
6

Uzun süren bir python betiğiyim, baştan başlatılan bir python betiği var. Bu betik oldukça fazla istekte bulunur. Her şey, ancak birkaç saat sonra kalıcı her istek için aşağıdaki hatayı elde başlar, ilk başta iyi çalışır:,Kalıcı gaierror 'İsim çözünürlüğünde geçici hata' birkaç saat çalıştıktan sonra

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 

Bu ad çözümlemesi veya DNS ile bir sorun değildir uygulama düzeltmeleri basit yeniden başlatma bu sorun .

Her iki Python 2.6 a 2.7'yi denedim ve aynı durumla karşılaşıyorum.

Ben Linux 2.6.35-30-virtual #61-Ubuntu SMP Tue Oct 11 18:26:36 UTC 2011 x86_64 GNU/Linux

bu sorunla birkaç mesajları olmuştur çalışan, ancak ediyorum basit bir açıklama veya solüsyon ile hiçbiri:

cevap

1

ben "Çok fazla açık dosya" durumuna girdiğinizde bunun olduğunu düşünün. Bir dahaki sefere bu, betiğinizin kaç tane dosya tanımlayıcısını açtığını görmeye çalışın.

+0

son zamanlarda elde Been, tüm sistem çapında sadece 394 dosya tanımlayıcıları açık ('lsof | wc -l'). – Endophage

0

Kök nedeni /etc/resolv.conf'un yalnızca python başlangıcında okunmasıdır. Çözümleme tablosunun bir yenilenmeye zorlamak için, (Linux üzerinde) bu çalıştırabilirsiniz:

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

Lütfen aynı cevabı birden çok soruya göndermeyin. Aynı bilgiler her iki soruyu da cevaplarsa, bir soru (genellikle yeni olan) diğerinin kopyası olarak kapatılmalıdır. Bunu [bir kopya olarak kapatmak için oylama] ile belirtebilirsiniz (http://stackoverflow.com/help/privileges/close-questions) ya da bunun için yeterli bir saygınlığa sahip değilseniz [bir bayrak yükseltmek] (Bir kopyası olduğunu belirtmek için http://stackoverflow.com/help/privileges/flag-posts). Aksi halde, cevabınızı * bu * sorusuna göre düzenlediğinizden emin olun ve aynı cevabı birden fazla yere yapıştırmayın. –

İlgili konular