Python 使用芹菜在启动时执行方法

Python 使用芹菜在启动时执行方法,python,rabbitmq,celery,Python,Rabbitmq,Celery,目前,我们正在使用芹菜和RabbitMQ在Ubuntu14.04服务器上执行可重复的任务,一切都很好。芹菜从RMQ中提取任务并执行正确的方法。我们有12名芹菜工人不断监控RMQ队列。我们有一个新的需求,我们希望在芹菜中只执行一次方法,或者说一天执行一次。这可能吗?我不想看其他可能的技术,因为我们目前正在投资芹菜/RMQ 提前感谢。对于每个任务,您都可以存储一个布尔值,用于跟踪当天是否执行该任务,这些数据可以存储在db或某些文件存储中。 维护一个每天执行的cron,该cron将每个任务值设置为fa

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


提前感谢。

对于每个任务,您都可以存储一个布尔值,用于跟踪当天是否执行该任务,这些数据可以存储在db或某些文件存储中。 维护一个每天执行的cron,该cron将每个任务值设置为false(假定false为当天未执行的任务)。 创建芹菜预运行信号,如果当天任务已完成,该信号将返回,否则将继续任务处理

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

芹菜节拍正是为了满足这一要求而制作的:

如果我想为每天的每个工作人员存储一个唯一的值,我将如何使用Redis作为db来实现这一点?因为有多个芹菜工人,所以我想将他们的key/id和值一起存储在Redis中。通过这种方式,存在一对一的匹配,并且不共享值。