簡體   English   中英

如何配置芹菜任務

[英]How can I configure celery task

我在一個項目中使用Celery,在其中將其用作調度程序(作為定期任務)。

我的芹菜任務看起來像:

@periodic_task(run_every=timedelta(seconds=300))
def update_all_feed():
    feed_1()
    feed_2()
    ...........
    feed_n()

但是隨着提要數量的增加,到達其他提要的時間很長(例如,當Celery使用提要編號n時,到達下一個提要(n + 1)的時間也很長。我想使用Celery的並發啟動多個提要。

瀏覽完文檔后,我發現可以調用如下的celery任務:

feed.delay()

如何配置celery,使其獲取所有提要ID並進行匯總(例如,一次5個提要)? 我意識到要實現這一點,我將必須運行Celery作為守護程序。

注意:我使用mongodb作為代理,我所做的就是安裝它,並將URL添加到Celery的配置中。

您可以像這樣安排所有提要

@periodic_task(run_every=timedelta(seconds=300))
def update_all_feed():
    feed_1.delay()
    feed_2.delay()
    .......
    feed_n.delay()

或者您可以使用一個組來簡化它

from celery import group
@periodic_task(run_every=timedelta(seconds=300))
def update_all_feed():
    group(feed.delay(i) for i in range(10))

現在要運行任務,您可以開始一個工作人員來執行任務

celery worker -A your_app -l info --beat

這開始每五分鍾執行一次任務。 但是,默認並發性等於您的cpu的核心。 您也可以更改並發。 如果要一次同時執行10個任務,則

celery worker -A your_app -l info --beat -c 10

芹菜文檔

from celery.task.sets import TaskSet
from .tasks import feed, get_feed_ids

job = TaskSet(tasks=[
        feed.subtask((feed_id,)) for feed_id in get_feed_ids()
    ])

result = job.apply_async()
results = result.join() # There's more in the documentation

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM