目前,我们正在使用 Celery & RabbitMQ 在 Ubuntu 14.04 服务器上执行可重复的任务,一切正常。芹菜从 RMQ 获取任务并执行正确的方法。我们有 12 名芹菜工人不断监控 RMQ 队列。我们有一个新的要求,我们想在 Celery 中只执行一次或每天执行一次 1 个方法。这可能做到吗?我不想看其他可能的技术,因为我们目前投资于Celery/RMQ。
提前谢谢。
对于每个任务,您可以存储一个布尔值,该值将跟踪该值是否在当天执行,您可以将此数据存储在数据库或某些文件存储中。维护一个每天执行的 cron,将每个任务值设置为 false(假设 false 表示当天未执行的任务(。创建一个芹菜pre_run信号,如果任务已经完成,则返回该信号,否则继续任务处理
from django.db import models
class TaskModel(models.Model)
task = models.CharField(max_length=200)
is_executed = models.BooleanField(default=False)
from celery.signals import task_prerun
@task_prerun.connect()
def task_setup(signal=None, sender=None, task_id=None, task=None, args=None, kwargs=None):
# this method executes before every celery task
task_obj = TaskModel.objects.get(task=task.name)
if task_obj.is_executed:
return
芹菜节拍正是针对此要求制作的:http://docs.celeryproject.org/en/latest/userguide/periodic-tasks.html