使用Celery在启动时执行方法

时间:2017-05-15 15:38:22

标签: python rabbitmq celery

目前,我们正在使用Celery& RabbitMQ在Ubuntu 14.04服务器上执行可重复的任务,一切都很好。 Celery从RMQ中获取任务并执行正确的方法。我们有12名芹菜工人不断监控RMQ队列。我们有一个新的要求,我们只想在Celery中执行一次方法或每天说一次。这可能吗?我不想看看可能的其他技术,因为我们目前投资Celery / RMQ。

提前致谢。

2 个答案:

答案 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)