2011-12-26 22 views
6

Tôi có một tập lệnh python chạy dài, được khởi chạy với khởi động mới. Kịch bản này tạo ra khá nhiều yêu cầu. Tất cả mọi thứ hoạt động tốt lúc đầu, tuy nhiên sau một vài giờ tôi bắt đầu vĩnh viễn nhận được lỗi sau cho mỗi yêu cầu:Gaierror vĩnh viễn 'Lỗi tạm thời khi phân giải tên' sau khi chạy trong vài giờ

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 

Đây không phải là một vấn đề với độ phân giải tên hoặc DNS, vì khởi động lại đơn giản của các bản sửa lỗi ứng dụng vấn đề này .

Tôi đã thử cả Python 2.6 2.7 và tình huống tương tự xảy ra.

Tôi đang chạy Linux 2.6.35-30-virtual #61-Ubuntu SMP Tue Oct 11 18:26:36 UTC 2011 x86_64 GNU/Linux

Đã có một vài bài viết với vấn đề này, nhưng không ai có một lời giải thích đơn giản hoặc giải pháp:

Trả lời

1

tôi nghĩ rằng điều này xảy ra khi bạn nhận được trong một tình trạng "quá nhiều tập tin mở". Lần tới, điều này xảy ra, hãy thử xem có bao nhiêu tập tin mô tả tập lệnh của bạn đã mở.

+0

Đã nhận được gần đây, chỉ có 394 bộ mô tả tệp mở trên toàn bộ hệ thống ('lsof | wc -l'). – Endophage

0

Nguyên nhân gốc là /etc/resolv.conf chỉ được đọc khi khởi động python. Để buộc làm mới bảng giải quyết, bạn có thể chạy (trên Linux):

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

Vui lòng không đăng câu trả lời giống nhau cho nhiều câu hỏi. Nếu cùng một thông tin thực sự trả lời cả hai câu hỏi, thì một câu hỏi (thường là câu hỏi mới hơn) nên được đóng thành bản sao của câu hỏi kia. Bạn có thể chỉ ra điều này bằng cách [bỏ phiếu để đóng nó như là một bản sao] (http://stackoverflow.com/help/privileges/close-questions) hoặc, nếu bạn không có đủ danh tiếng cho điều đó, [giơ cờ] (http://stackoverflow.com/help/privileges/flag-posts) để cho biết rằng đó là bản sao. Nếu không, hãy đảm bảo bạn điều chỉnh câu trả lời cho câu hỏi * này * và không chỉ dán cùng một câu trả lời ở nhiều nơi. –

Các vấn đề liên quan