用芹菜刮网站

2024-06-24 11:36:02 发布

您现在位置:Python中文网/ 问答频道 /正文

目前,我的结构是Flask, Redis, RabbitMQ and Celery。在我的抓取中,我使用了requests和{}。 我的烧瓶在apache和wsgi上运行。这是生产中的app.run(threaded=True)

我有25个API。10个是抓取URL的头等,其余的是使用第三方API来获取该URL。在

我使用chord来处理我的api并使用requests从api获取数据。在

对于我的和弦头我有3个工人,而在我的回调我只有1个。 我遇到了一个瓶颈问题,即ConnectTimeoutError和{}。当我读到一些线程时,它说每个进程都要超时,因为出现这个错误意味着远程服务器过载。在

问题是因为我使用的是和弦,所以使用时间睡眠没有意义,因为25API调用将同时运行。有人遇到过这种情况吗?还是我做错了?在

我读到的线程似乎在说将请求更改为pycurl或使用Scrapy。但我不认为是这样,因为ConnectTimeoutError是关于我的主机重载一个特定的url服务器。在

我的和弦过程:

callback = create_document.s(url, company_logo, api_list)
header = [api_request.s(key) for key in api_list.keys()]
result = chord(header)(callback)

在api_请求中使用任务请求。在


Tags: key服务器apiurlflaskcallbackrequests线程
1条回答
网友
1楼 · 发布于 2024-06-24 11:36:02

如果要限制同时运行的暂存数量,可以创建一个排队任务,检查是否有另一个任务正在运行,该任务与要运行的任务具有相同的属性。如果任务正在运行,请让它休眠几秒钟,然后再次检查。当它看到一个任务没有运行时,您可以对要运行的任务进行排队。这将允许您与异步任务睡眠。如果只有一定数量的任务在运行,您甚至可以计算任务数并运行更多的任务。有了这个,你可以一次运行5个,看看是否有足够的限制,然后当你看到一个已经完成时再排队等

::编辑::

Documentation for Celery Inspect

相关问题 更多 >