gpt4 book ai didi

python - 正确的 greenlet 终止

转载 作者:太空狗 更新时间:2023-10-30 02:47:00 24 4
gpt4 key购买 nike

我正在使用 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com