- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有一个多线程脚本,当它连接到服务器时偶尔会卡住,但服务器不会发回任何东西。 Netstat 显示一个已连接的 tcp 套接字。即使我设置了超时也会发生这种情况。超时在无线程脚本中工作正常。这是一些示例代码。
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 个 url。有多少似乎并不重要。
编辑2:我刚刚在下面测试了这段代码。我使用了一个休眠 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 似乎正常超时。所以我想这与网址的数量有关?吉尔?
编辑3:
我认为这可能与 libcurl 本身有关,因为有时当我检查脚本时,libcurl 仍连续连接到服务器数小时。如果 pycurl 正确超时,则套接字将关闭。
最佳答案
我修改了您的“edit2”代码以生成多个线程,它在我的机器上运行良好(Ubuntu 10.10 和 Python 2.6.6)
import threading
import pycurl
def testf():
c = pycurl.Curl()
c.setopt(pycurl.CONNECTTIMEOUT, 3)
c.setopt(pycurl.TIMEOUT, 3)
c.setopt(pycurl.NOSIGNAL, 1)
c.setopt(pycurl.URL, 'http://localhost/cgi-bin/foo.py')
c.setopt(pycurl.HTTPGET, 1)
c.perform()
for i in range(100):
t = threading.Thread(target=testf)
t.start()
我可以生成 100 个线程并在 3 秒内超时(如我指定的那样)。
我不会去指责 GIL 和线程争用 :)
关于python - pycurl/curl 不遵循 CURLOPT_TIMEOUT 选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4549490/
我只想知道下面两种说法的区别: curl.setopt(pycurl.WRITEDATA, fp) curl.setopt(pycurl.WRITEFUNCTION, fp.write) fp 是一个
我正在将 ebay sdk 移植到 python3,我偶然发现了以下问题。 我正在使用 pycurl 发送一些 HTTP 请求。这是我的配置方式: self._curl = pycurl.Cu
我将我的 mac 更新到 high sierra,现在我无法安装 pycurl。它失败并显示以下消息:Curl 已配置为使用 SSL,但我们无法确定它使用的是哪个 SSL 后端。请参阅 PycURL
我想获取响应中携带的Cookie(Set-Cookie: name=value; ...)。 传递信息常量和空列表的引用时: set_cookies = [] c.getinfo(c.COOKIELI
使用您向其发送请求的 API 处理一个小项目,然后它会返回一个带有 zip 文件的响应,然后您可以下载该文件。我第一次自动下载时尝试使用 setopt(curl.WRITEDATA, fp) 函数,但
我编写了一个脚本来从 Qualys 获取扫描结果,每周运行一次以收集指标。 此脚本的第一部分涉及获取过去一周运行的每个扫描的引用列表以进行进一步处理。 问题是,虽然有时这会完美地工作,但有时脚本会卡在
我创建了一个 python 3 脚本,允许我在搜索引擎 (DuckDuckGo) 上进行搜索,获取 HTML 源代码并将其写入文本文件。 import pycurl from io import By
在我的系统 (MAC OS X) 中尝试安装 pycurl 时,出现以下错误。不知道如何解决它。请帮忙!!! nsh$ sudo easy_install pycurl Searching
我正在尝试进行一些网络抓取,它涉及发送一个带有多选框列表的表单,看起来与此类似: value1 value2 现在,我想使用 pycurl 发送 value1 和 value2,例
在我的 PC (Windows 10 x64) 上安装了一个新的、干净的系统后,我遇到了 python 的 pycurl 库的一些问题(当然)。 我在 Python 2.7 和 3.4 上尝试过这个
我有一个很大的 URL 列表,我必须并行下载它并检查每个响应返回的 header 之一。 我可以使用 CurlMulti用于并行化。我可以使用 /dev/null 作为 fb,因为我对正文不感兴趣,只
我在 python 中使用 pycurl 向 URL 发出请求,该 URL 返回相当大的 json 格式响应。当我在浏览器中转到 URL 时,我看到了全部内容,但是如果我使用 pycurl 并打印接收
我似乎无法让 RESUME_FROM 选项起作用。这是我一直在测试的一些示例代码: import os import pycurl import sys def progress(total, exi
使用 pycurl 时查看已设置哪些选项(opt)的最佳方法是什么? 例如,我调用一个返回 pycurl 对象的方法。我想做的是调用电话查看已设置的 opts (pycurl.setopts)。 最佳
我创建了一个网络服务 bottle并将其用作 JSON 接口(interface)。该例程正在收集信息,检查 URL 的有效性和 http_code。 def get_statuscode(url):
下面是一段上传文件的代码: file_size = os.path.getsize('Tea.rdf') f = file('Tea.rdf') c = pycurl.Curl() c
好吧,我认为问题的标题很容易解释,所以你可能不需要继续阅读,但这里是这样的: 我一直在使用 PyCurl有一段时间,我总是使用 curlConnector = pycurl.Curl() curlCo
这个问题在这里已经有了答案: 关闭 11 年前。 Possible Duplicate: curl on app engine GAE 支持 pycurl 吗? 我已经从这个链接下载了 pycurl
我什么都试过了!我找不到在我的 Windows 7 机器上安装 pyCurl 的方法! 我找到了这些二进制文件 link ... 但是 2.6 没有二进制文件。 :( 帮助会很大。 :) 最佳答案 这
我是初学者,使用 Python 和 Pycurl 进行网页压力测试。但是,pycurl 不断在终端中打印出返回的 html,这使得压力测试花费的时间比它应该花费的时间还要多。我正在使用的一个这样的 p
我是一名优秀的程序员,十分优秀!