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)
我想将arg1
,arg2
,arg3
变量的初始化移动到一个单独的函数中并使它们成为类字段,因此无需在调用时直接传递:
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
变量将被覆盖?因此,这个工作的唯一方法 - 介绍另一个类?