工人关闭时,芹菜活动任务丢失

时间:2018-07-18 18:19:47

标签: python django celery django-celery celery-task

我正在使用celery = 4.0.0,当任务运行较长时间并且在此期间工人关闭时,我丢失了所有这些任务。如何重新启动所有丢失的任务。提前致谢。 芹菜= 4.0.0 redis = 2.10.5

1 个答案:

答案 0 :(得分:0)

您应该覆盖芹菜信号方法。 信号清单http://docs.celeryproject.org/en/latest/userguide/signals.html

为芹菜任务创建模型。例如,它的名称是CeleryTask。 在运行任务之前,请在CeleryTask模型中创建新的任务对象。当芹菜重新启动并且工人准备就绪时,任务将再次运行。

tasks.py

from celery.signals import worker_ready, task_prerun

def on_task_prerun(*args, **kwargs):
    from .models import CeleryTask

    task_properties = kwargs['task']

    ctask = CeleryTask.objects.create(
        task_name=task_properties.name,
        task_args=task_properties.request.args
    )

def on_worker_ready(*args, **kwargs):
    from .models import CeleryTask
    from celery.execute import send_task

    tasks = CeleryTask.objects.all()

    for ctask in tasks:
        send_task(ctask.task_name, ctask.task_args)

worker_ready.connect(on_worker_ready, dispatch_uid='on_worker_ready')
task_prerun.connect(on_task_prerun, dispatch_uid='on_task_prerun')