芹菜工人并发



我做了一个刮板以扫描150个链接。每个链接都有大约5K子链接以获取信息。

我正在使用芹菜在背景中运行刮板,并将数据存储在Django Orm上。我使用 BeautifulSoup进行废除。

我使用此命令运行芹菜

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