2014-10-27 77 views
1

我正在项目中使用芹菜,在那里我用它作为调度程序(作为定期任务)。我如何配置芹菜任务

我芹菜任务是这样的:

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

但作为饲料的数量增加它花费很长的时间去其他饲料(例如,当芹菜正在与饲料数n这需要很长的时间。要进入下一个饲料(N + 1)我想用芹菜的并发启动多个饲料

通过文档会后,我发现我可以调用芹菜任务象下面这样:

feed.delay() 

如何配置芹菜以获得所有饲料ID并将它们聚合(例如,一次5个饲料)?我意识到要实现这一点,我将不得不将Celery作为守护进程运行。 012B:我使用mongodb作为代理,我所做的只是安装它并在Celery的配置中添加url。

回答

0

你可以安排所有资讯这样

@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 
0

Celery documentation

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