python curl invalid syntax_python – pycurl / curl不遵循CURLOPT_TIMEOUT选项

我有一个多线程脚本,当它连接到服务器但服务器不发回任何东西时偶尔会冻结. Netstat显示连接的tcp套接字.即使我设置了TIMEOUT,也会发生这种情况.超时脚本中的超时工作正常.这是一些示例代码.

def xmlscraper(url):

htmlpage = StringIO.StringIO()

rheader = StringIO.StringIO()

c = pycurl.Curl()

c.setopt(pycurl.USERAGENT,"user agent string")

c.setopt(pycurl.CONNECTTIMEOUT,60)

c.setopt(pycurl.TIMEOUT,120)

c.setopt(pycurl.FOLLOWLOCATION,1)

c.setopt(pycurl.WRITEFUNCTION,htmlpage.write)

c.setopt(pycurl.HEADERFUNCTION,rheader.write)

c.setopt(pycurl.HTTPHEADER,['Expect:'])

c.setopt(pycurl.NOSIGNAL,1)

c.setopt(pycurl.URL,url)

c.setopt(pycurl.HTTPGET,1)

pycurl.global_init(pycurl.GLOBAL_ALL)

for url in urllist:

t = threading.Thread(target=xmlscraper,args=(url,))

t.start()

任何帮助将不胜感激!几个星期以来一直试图解决这个问题.

编辑:

urllist有大约10个网址.似乎有多少并不重要.

EDIT2:

我刚刚在下面测试了这段代码.我使用了一个睡眠100秒的PHP脚本.

import threading

import pycurl

def testf():

c = pycurl.Curl()

c.setopt(pycurl.CONNECTTIMEOUT,3)

c.setopt(pycurl.TIMEOUT,6)

c.setopt(pycurl.NOSIGNAL,1)

c.setopt(pycurl.URL,'http://xxx.xxx.xxx.xxx/test.php')

c.setopt(pycurl.HTTPGET,1)

c.perform()

t = threading.Thread(target=testf)

t.start()

t.join()

该代码中的Pycurl似乎正常超时.所以我猜它与网址的数量有关? GIL?

EDIT3:

我认为它可能与libcurl本身有关,因为当我检查脚本时libcurl仍然连续几个小时连接到服务器.如果pycurl正确地超时,则套接字将被关闭.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值