[英]Celery worker concurrency
我做了一个刮板,可以扫描大约150个链接。 每个链接都有大约5k个子链接可从中获取信息。
我正在使用Celery在后台运行刮板并将数据存储在Django ORM上。 我将BeautifulSoup
用作剪贴簿URL。
当我使用此命令运行芹菜时
celery worker -A ... --concurrency=50
一切正常,但工人从1到50睡觉
在刮板完成任务之前,我如何使芹菜运转?
首先,该命令不会启动50个工作程序,而是1个具有50个进程的工作程序。 我还建议您使用尽可能多的可用内核。 (让我对其余的答案说8。)
我的猜测是其他进程是空闲的,因为您仅执行一项任务。 如果要进行并发工作,则必须将工作分成可以并发执行的部分。 最简单的方法是对要抓取的每个链接单独执行一个任务。 然后,工作人员将开始抓取8个链接,当完成1个链接时,它将从下一个链接开始,直到完成所有150个链接的抓取。
因此您的任务调用代码应大致如下:
for link in links:
scrape_link.delay(link)
使用scrape_link,您的任务函数将类似于:
@app.task
def scrape_link(link):
#scrape the link and its sub-links
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.