Python套接字连接超时问题
我正在尝试写一个简单的脚本,连接到freenode IRC网络(地址是irc.freenode.net,端口是6667),定期在一个频道上发布信息。为此,我使用了Python的套接字(socket)。以前这个方法一直很好用,但现在我遇到了一个奇怪的问题:套接字连接的时间非常长,有时甚至连接不上(偶尔会超时)。不过,这种情况只发生在从文件运行脚本的时候。如果直接在解释器里输入代码,就没问题:
>>> import socket
>>> def f():
>>> s = socket.socket()
>>> print("Connecting")
>>> s.connect(('irc.freenode.net', 6667))
>>> print("Connected")
>>> s.close()
>>> f()
套接字大约一秒钟就能连接上,一切正常。但是,如果我把以下代码放在一个文件里,然后运行python 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 个回答
1
网络总是会出现一些间歇性的问题,你的代码需要能够处理这些情况。我建议采取两个步骤。首先,在使用 socket.create_connection
时,可以加上 timeout=
参数,这样可以让程序多等一会儿再放弃连接。然后,把打开 socket 的代码放在 try
和 except socket.timeout
之间,这样如果出现超时的情况,可以尝试重新连接几次,可能在每次重试之间等一两秒。