Python:控制超时长度
我有一段代码,类似下面这样在一个脚本里运行:
try:
s = ftplib.FTP('xxx.xxx.xxx.xxx','username','password')
except:
print ('Could not contact FTP serer')
sys.exit()
如果FTP网站无法访问,这个脚本几乎就像“卡住”了一样……平均大约要等75秒才会调用sys.exit()……我知道这75秒可能因系统不同而有所差异,但有没有办法让Python只尝试一次,如果失败就立即退出呢?我使用的平台是Mac OS X 10.5和Python 2.5.1。
5 个回答
这是一个链接,指向Python的官方文档,具体讲解了一个叫做“settimeout”的功能。这个功能是用来设置网络连接的超时时间,也就是说,如果在设定的时间内没有收到回应,程序就会停止等待。这在处理网络请求时非常有用,可以避免程序因为等待而卡住。
因为你使用的是Python 2.5,所以你可以通过以下方式为所有的网络连接操作(包括FTP请求)设置一个全局的超时时间:
socket.setdefaulttimeout()
(这个功能是在Python 2.3中加入的)
从2.6版本开始,FTP构造函数
增加了一个可选的timeout
参数:
class ftplib.FTP([host[, user[, passwd[, acct[, timeout]]]]])
这个方法会返回一个新的FTP类的实例。当你提供了主机名(host)时,它会自动调用connect(host)来连接主机。如果你提供了用户名(user),它还会调用login(user, passwd, acct)来登录(其中passwd和acct如果没有提供,默认是空字符串)。这个可选的timeout参数是用来设置连接等阻塞操作的超时时间,单位是秒(如果没有指定,就会使用全局的默认超时时间设置)。
在2.6版本中进行了更改:增加了timeout参数。
从2.3版本开始,你可以使用全局的默认超时时间:
socket.setdefaulttimeout(timeout)
这个方法用来设置新创建的socket对象的默认超时时间,单位是浮动的秒数。如果设置为None,表示新创建的socket对象没有超时时间。第一次导入socket模块时,默认值是None。
这个功能在2.3版本中新增。