import pycurl
pycurl.version
# libcurl/7.29.0 GnuTLS/2.12.23 zlib/1.2.7 libidn/1.25 librtmp/2.3
c = pycurl.Curl()
c.setopt(pycurl.TIMEOUT_MS, 1000)
c.setopt(pycurl.URL, 'http://example.com/')
c.perform()
# ok
c = pycurl.Curl()
c.setopt(pycurl.URL, 'http://example.com/')
c.setopt(pycurl.TIMEOUT_MS, 999)
c.perform()
# pycurl.error: (28, '')
c = pycurl.Curl()
c.setopt(pycurl.URL, 'http://example.com/')
c.setopt(pycurl.TIMEOUT_MS, 999)
c.setopt(pycurl.NOSIGNAL, 1)
c.perform()
# ok again
有人可以解释为什么超过1秒的超时失败并且nosignal再次使用吗?
答案 0 :(得分:1)
我认为这是因为CURL所做的一些库调用(例如DNS查找)不支持超时。因此,中断它们的唯一方法是设置信号。
答案 1 :(得分:1)
致libcurl API,timeout_ms
<使用标准名称解析器时不允许使用1000.
CURLOPT_TIMEOUT_MS
CURLOPT_TIMEOUT的替代方法,但需要毫秒数 代替。如果构建libcurl以使用标准系统名称解析器, 传输的那部分仍将使用全秒分辨率 超时允许的最小超时时间为一秒。