抽象任务:Abstract Tasks
使用 task() 装饰器创建的所有任务都将从应用程序继承 Task 类。 也可以通过 base 参数进行指定基类:
1
@app.task(base=OtherTask):
2
def add(x, y):
3
return x + y
Copied!
创建自定义任务类,需要继承 celery.Task
1
from celery import Task
2
3
class DebugTask(Task):
4
5
def __call__(self, *args, **kwargs):
6
print('TASK STARTING: {0.name}[{0.request.id}]'.format(self))
7
return super(DebugTask, self).__call__(*args, **kwargs)
Copied!
tip 如果重写 taks 中的 __call__ 函数,就必须要要调用 super() 函数,这样基本调用方法可以设置直接调用任务时使用的默认请求。 基类是比较特殊的,因为它还没有绑定到任何特定的应用程序。一旦任务绑定到应用程序,它将读取配置以设置默认值,等等。 要实现基类,需要使用 app.taks() 装饰器创建任务:
1
@app.task(base=DebugTask)
2
def add(x, y):
3
return x + y
Copied!
也可以通过更改应用程序的 app.task() 属性来更改其默认基类:
1
>>> from celery import Celery, Task
2
3
>>> app = Celery()
4
5
>>> class MyBaseTask(Task):
6
... queue = 'hipri'
7
8
>>> app.Task = MyBaseTask
9
>>> app.Task
10
<unbound MyBaseTask>
11
12
>>> @app.task
13
... def add(x, y):
14
... return x + y
15
16
>>> add
17
<@task: __main__.add>
18
19
>>> add.__class__.mro()
20
[<class add of <Celery __main__:0x1012b4410>>,
21
<unbound MyBaseTask>,
22
<unbound Task>,
23
<type 'object'>]
Copied!
Export as PDF
Copy link