pycurl nosignal&超时< = 999ms

时间:2013-05-02 10:24:38

标签: python curl pycurl

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再次使用吗?

2 个答案:

答案 0 :(得分:1)

我认为这是因为CURL所做的一些库调用(例如DNS查找)不支持超时。因此,中断它们的唯一方法是设置信号。

答案 1 :(得分:1)

libcurl APItimeout_ms<使用标准名称解析器时不允许使用1000.

  

CURLOPT_TIMEOUT_MS

     

CURLOPT_TIMEOUT的替代方法,但需要毫秒数   代替。如果构建libcurl以使用标准系统名称解析器,   传输的那部分仍将使用全秒分辨率   超时允许的最小超时时间为一秒。