芹菜和实例变量

时间:2015-10-10 14:15:32

标签: python celery

Celery允许定义自己的类任务,因此您可以将任务拆分为函数并将它们组合成一个类,如:

 class MyTask(Task):
      is_abstract = True

      def sub_task1(self):
           pass

      def sub_task2(self, arg1, arg2):
           pass

      def sub_task3(self, arg1, arg2, arg3):
           pass

@app.task(base=MyTask, bind=True):
def do_some_stuff(self, pk):
     print('Hello')
     arg1, arg2, arg3 = 'foo', 'bar', 'bar'
     self.sub_task1()
     self.sub_task2(arg1, arg2)
     self.sub_task3(arg1, arg2, arg3)

我想将arg1arg2arg3变量的初始化移动到一个单独的函数中并使它们成为类字段,因此无需在调用时直接传递:

 class MyTask(Task):
      ....
      def sub_task3(self):
             self.arg1 ...


def do_some_stuff(self, pk):
     print('Hello')
     self.setup()
     self.sub_task1()
     self.sub_task2()
     self.sub_task3()

但我知道celery instantiates MyTask只有一次。这是否意味着如果一些任务将并行运行self.argX变量将被覆盖?因此,这个工作的唯一方法 - 介绍另一个类?

0 个答案:

没有答案