芹菜定期任务为django上的asnyc

时间:2016-07-12 07:27:39

标签: python django celery djcelery

我不擅长英语,所以如果你不理解我的句子,请给我任何评论。

我在django上使用celery进行定期任务。

CELERYBEAT_SCHEDULE = {
    'send_sms_one_pm': {
        'task': 'tasks.send_one_pm',
        'schedule': crontab(minute=0, hour=13),
    },
    'send_sms_ten_am': {
        'task': 'tasks.send_ten_am',
        'schedule': crontab(minute=0, hour=10),
    },
    'night_proposal_noti': {
        'task': 'tasks.night_proposal_noti',
        'schedule': crontab(minute=0, hour=10)
    },
}

这是我的芹菜时间表,我使用redis作为芹菜排队。

问题是,当最大的任务开始时,其他任务被搁置。 最大的任务将被处理10小时,其他任务将在10小时后开始。

我的任务看起来像

@app.task(name='tasks.send_one_pm')
def send_one_pm():

我发现,芹菜给我task.apply_asnyc(),但找不到定期任务可以在asnyc上工作。

所以,我想知道芹菜的周期性任务可以作为asnyc任务。我的芹菜工人是8名工人。

1 个答案:

答案 0 :(得分:0)

您是否也在设置中指定了CELERYBEAT_SCHEDULER = 'djcelery.schedulers.DatabaseScheduler'? 如果您希望一个任务开始在另一个任务之后运行,则应使用apply_asnyc()并使用链接kwargs,它看起来像这样:

res=[signature(your_task.name, args=(...), options=kwargs, immutable=True),..]
task.apply_async((args), link=res)