2017-05-15 17 views
0

目前,我們使用Celery & RabbitMQ在Ubuntu 14.04服務器上執行可重複的任務,並且一切都很好。 Celery從RMQ中提取任務並執行正確的方法。我們有12名芹菜工人不斷監測RMQ隊列。我們有一個新的要求,我們只想在Celery中執行一次方法,或者每天說一次。這可能嗎?我不想看看其他技術,因爲我們現在投資Celery/RMQ。使用Celery在啓動時執行方法

在此先感謝。

回答

0

對於每個任務,您可以存儲一個布爾值,該值將跟蹤是否在一天中執行的數據不是,您可以將這些數據存儲在數據庫或某個文件存儲中。 維護每日執行的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 
+0

如果我要存儲一個獨特的價值每天的每個工作人員,我如何用Redis作爲db來做到這一點?由於有多名芹菜工人,我想將他們的鑰匙/ ID和價值一起存儲在Redis中。這樣,就有了一對一的匹配,並且不會共享值。 – NetRocks