目前,我的结构是Flask, Redis, RabbitMQ and Celery
。在我的抓取中,我使用了requests
和{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_请求中使用任务请求。在
如果要限制同时运行的暂存数量,可以创建一个排队任务,检查是否有另一个任务正在运行,该任务与要运行的任务具有相同的属性。如果任务正在运行,请让它休眠几秒钟,然后再次检查。当它看到一个任务没有运行时,您可以对要运行的任务进行排队。这将允许您与异步任务睡眠。如果只有一定数量的任务在运行,您甚至可以计算任务数并运行更多的任务。有了这个,你可以一次运行5个,看看是否有足够的限制,然后当你看到一个已经完成时再排队等
::编辑::
Documentation for Celery Inspect
相关问题 更多 >
编程相关推荐