2017-05-15 27 views
0

現在、Celery & RabbitMQを使用して、Ubuntu 14.04サーバーで繰り返し可能なタスクを実行しています。セロリはRMQからタスクを取り出し、正しい方法を実行します。我々は、12人のセロリの労働者が常にRMQキューを監視しています。 Celeryでは、1回だけ、または1日に1回、1つのメソッドを実行したいという新たな要件があります。これは可能ですか?現時点でセロリー/ RMQに投資しているので、私は他の技術を見たくはありません。Celeryを使用して起動時にメソッドを実行する

ありがとうございます。

答えて

0

すべてのタスクについて、その日に実行されていないかどうかを追跡するブール値を格納できます。このデータはdbまたは一部のファイルストアに格納できます。 すべてのタスク値をfalseに設定するcronを毎日実行します(その日に実行されないタスクとして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

その日の労働者1人あたり、レディスをデータベースとして使ってどうすればいいですか?複数のセロリの従業員がいるので、私はRedisの値と共にそのキー/ idを保存したい。この方法では、1対1の一致があり、値は共有されません。 – NetRocks

関連する問題