- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在使用 gevent 下载一些 html 页面。有些网站速度太慢,有些网站会在一段时间后停止服务请求。这就是为什么我必须限制我提出的一组请求的总时间。为此,我使用 gevent“Timeout”。
timeout = Timeout(10)
timeout.start()
def downloadSite():
# code to download site's url one by one
url1 = downloadUrl()
url2 = downloadUrl()
url3 = downloadUrl()
try:
gevent.spawn(downloadSite).join()
except Timeout:
print 'Lost state here'
但它的问题是当异常触发时我会丢失所有状态。
假设我抓取网站“www.test.com”。在站点管理员决定切换网络服务器进行维护之前,我已经设法下载了 10 个 url。在这种情况下,我将在异常触发时丢失有关已抓取页面的信息。
问题是 - 即使发生超时,我该如何保存状态和处理数据?
最佳答案
为什么不尝试这样的事情:
timeout = Timeout(10)
def downloadSite(url):
with Timeout(10):
downloadUrl(url)
urls = ["url1", "url2", "url3"]
workers = []
limit = 5
counter = 0
for i in urls:
# limit to 5 URL requests at a time
if counter < limit:
workers.append(gevent.spawn(downloadSite, i))
counter += 1
else:
gevent.joinall(workers)
workers = [i,]
counter = 0
gevent.joinall(workers)
您还可以将每个 URL 的状态保存在字典或其他内容中,或者将失败的状态附加到不同的数组中,以便稍后重试。
关于python - 正确的 greenlet 终止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17724036/
我正在运行一个可以在这里找到的模块:https://github.com/danieliu/play-scraper 我在python文件中的代码如下: 导入 play_scraper print(p
这是什么意思?我该如何解决? gcc -pthread -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -fPIC -I/home/j
可以requests库 session 对象可以在 gevented 程序中安全地跨 greenlets 使用吗? 编辑 - 添加更多说明: 当一个 greenlet 因调用套接字向服务器发送请求而屈
我使用的是 Windows 10,我从源代码安装 Odoo ( https://github.com/odoo/odoo/tree/aa0554d224337e1d966479a351a3ed059d
greenlet包被 gevent 和 eventlet 用于异步 IO。它是作为 C 扩展编写的,因此不适用于 Jython 或 IronPython。如果不关心性能,那么在纯 Python 中实现
我正在寻找一种通过另一个函数传递函数参数的方法,其方式与 Stackless 的 tasklet 实例化相同: stackless.tasklet(function_being_called)(*ar
我知道阻塞代码对于事件循环(即 NodeJS)来说是一种罪过,但是对于 greenlets(我认为是绿色线程)呢?运行调用阻塞函数的代码是否有问题? 最佳答案 没有 gevent 提供的事件循环的 G
我将 bottle & gevent 用于我的 python (2.7.6) 应用程序。 # -*- coding: utf-8 -*- from __future__ import unicode_
假设我有一个 Event() 进来,并且有 X 个 greenlets 在等待这个事件。当那些等待的 greenlets 完成后,我想做一个 Publish() 我怎么知道什么时候发布? 原理图: e
我对 greenlets 和 gevent 还是个新手,但据我了解,greenlets 会在显式 yield 语句或阻塞 I/O 操作时屈服于其他 greenlets。但是使用 print 语句阻塞写
我正在尝试实现一个简单的 gevent 设置。有一个发件人应该并行向多个服务员发送一个值。 Event 类最接近解决此问题,如下所示。 每三秒,setter 创建一个事件,解除对所有等待者的阻塞。事件
我希望为 gevent greenlet 分配自定义名称/标识符。 Gevent 已经分配了一个唯一的名称: def name(self): """ The greenlet name
我想编写一个程序,其中有几个永远运行的相互调度的函数。我想到使用 gevent 来达到这个目的。他们对长期运行的 greenlet 有什么问题吗? 我正在编写这种格式的程序 from gevent.p
我正在 try catch greenlet 中引发的异常。根据this tutorial ,不幸的是“在 Greenlet 中引发异常,留在 Greenlet 中”。在下面的代码中,我有一个生成爬行
在使用 gevent 时,每当子 greenlet 抛出异常时,我希望它冒泡到父级(理想情况下让父级抛出异常)。在 greenlets 的文档中,它说这是自动完成的,但在 gevent 中似乎并非如此
我正在搜索如何在一个程序中的 gevent 和其他 greenlet 中运行服务器。所以我想要服务器(多个连接)和一个或两个其他 greenlets。这可能吗?如果是,那么如何? 最好的问候,马特。
我正在使用 gevent 下载一些 html 页面。有些网站速度太慢,有些网站会在一段时间后停止服务请求。这就是为什么我必须限制我提出的一组请求的总时间。为此,我使用 gevent“Timeout”。
当我尝试使用 kill() 杀死一个 greenlet 时,'block' 参数默认为 True, Greenlet.kill(self, exception, block, timeout) 文档说
当我使用标准的 logging 包从 greenlets 中打印出日志语句时,我得到的文本如下所示: 2014-02-06 22:38:43,428 [INFO] (11396-Dummy-2) ev
我是异步编程新手。我正在做一个小型 POC,我想了解 greenlets 与共享对象的行为方式。我写了这段代码 - from gevent import monkey, sleep from geve
我是一名优秀的程序员,十分优秀!