目前,我们正在使用Celery& RabbitMQ在Ubuntu 14.04服务器上执行可重复的任务,一切都很好。 Celery从RMQ中获取任务并执行正确的方法。我们有12名芹菜工人不断监控RMQ队列。我们有一个新的要求,我们只想在Celery中执行一次方法或每天说一次。这可能吗?我不想看看可能的其他技术,因为我们目前投资Celery / RMQ。
提前致谢。
答案 0 :(得分:0)
对于每个任务,您都可以存储一个布尔值,该值将跟踪是否在当天执行该值,此数据可以存储在db或某个文件存储中。 维护每天执行的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
答案 1 :(得分:0)
Celery beat完全符合此要求:http://docs.celeryproject.org/en/latest/userguide/periodic-tasks.html