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