繁体   English   中英

芹菜工人并发

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM