我正在尝试将带有超时选项的ftplib.FTP()
用作特定主机名的某些超时值。但我遇到了奇怪的行为。为了测试它,我编写了一段非常简单的代码。
import ftplib
from ftplib import FTP
ftp = ftplib.FTP("google.com",timeout=2)
API文档表示以秒为单位输入超时值,但似乎需要更长的时间,对我而言,它几乎需要超过8秒。任何人都可以解释一下这个行为。我正在使用python2.7
答案 0 :(得分:2)
ftplib.FTP
调用socket.create_connection()
。根据
到文档https://docs.python.org/2/library/socket.html#socket.create_connection
如果host是非数字主机名,它将尝试为两者解析它 AF_INET和AF_INET6,然后尝试连接到所有可能的 反过来,直到连接成功。
快速检查google.com
会显示十几个(或更多)
取决于您所在国家/地区。你的2秒超时
适用于主机的每个。
如果您想将总时间限制为2秒,请先执行查找并将数字地址传递给ftplib.FTP
来电:
import socket, ftplib
host = socket.gethostbyname('google.com')
ftp = ftplib.FTP(host, timeout=2)
答案 1 :(得分:0)
可选的timeout参数指定超时(以秒为单位) 阻止连接尝试等操作
,即超时可能会限制单个套接字操作,但它没有说明FTP()
调用本身的持续时间。
作为@user590028 pointed out:FTP调用(间接)socket.create_connection()
,可以按顺序调用多个阻塞操作,如果每个操作的时间少于超时秒,即使所有操作合并的时间更长,也可能成功。
如果要强制执行总超时,请参阅Timeout on a Python function call。