2011-05-29 156 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