2011-05-29 160 views
4

我想寫一個簡單的腳本,連接到freenode IRC網絡(irc.freenode.net在端口6667上)以定期在一個頻道上發佈信息。爲此,我正在使用Python套接字。這在過去已經運行良好,但是現在我遇到了一個奇怪的問題:如果連接(偶爾超時),連接需要非常長的時間才能連接。但是,只有在腳本從文件運行時纔會發生這種情況。當直接輸入到解釋器時,它工作正常:Python套接字連接超時問題

>>> import socket 
>>> def f(): 
>>> s = socket.socket() 
>>> print("Connecting") 
>>> s.connect(('irc.freenode.net', 6667)) 
>>> print("Connected") 
>>> s.close() 
>>> f() 

套接字連接大約一秒鐘,一切都很好。但是,如果我把下面的代碼放在一個文件並運行蟒蛇test.py,它掛在s.connect偶爾超時:

import socket 
s = socket.socket() 
print("Connecting") 
s.connect(('irc.freenode.net', 6667)) 
print("Connected") 
s.close() 

我從未有過這個問題。這也發生在我網絡上的其他計算機上(可能是網絡問題?)。我正在使用Python 3.2。謝謝。

回答

1

網絡總是有間歇性問題,您的代碼需要處理它們。我建議兩個層面的行動。首先,使用timeout=參數socket.create_connection稍等一會再放棄。然後將插座插入tryexcept socket.timeout對內,然後重試幾次,可能會在重試之間休息一兩秒鐘。

+1

我很感謝你的回答。我認爲這是一個Python問題,我可以使用irc客戶端(irssi)來連接就好。我還運行了一個traceroute到irc.freenode.net,並沒有發現任何主要的瓶頸。 – 2011-05-30 16:24:52

+1

如果您認爲您發現了可重現的錯誤,那麼您應該在http://bugs.python.org/上報告它。 – 2011-05-31 01:23:19