我使用的是celene=4.0,当任务运行更长时间,并且在此期间工作人员关闭时,我会丢失所有这些任务。如何重新启动所有丢失的任务。提前谢谢。芹菜=4.0redis=2.10.5
您应该覆盖芹菜信号方法。信号清单;http://docs.celeryproject.org/en/latest/userguide/signals.html
为芹菜任务创建一个模型。例如,它的名称是CeleryTask。在运行任务之前,请在CeleryTask模型中创建新的任务对象。当芹菜重新启动并且工作人员准备就绪时,任务将再次运行。
任务.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')