celery中 @app.task与@shared.task 的区别

发布时间 2024-01-10 22:31:56作者: tslam

当我们使用@app.task装饰器定义我们的异步任务时,那么这个任务依赖于根据项目名myproject生成的Celery实例

app = Celery('myproject')
 
 
@app.task(bind=True)
def debug_task(self):
    print('Request: {0!r}'.format(self.request))

 

然而我们在进行Django开发时为了保证每个app的可重用性,我们经常会在每个app文件夹下编写异步任务,这些任务并不依赖于具体的Django项目名。使用@shared_task 装饰器能让我们避免对某个项目名对应Celery实例的依赖,使app的可移植性更强

from __future__ import absolute_import
from celery import shared_task
 
 
@shared_task
def add(x, y):
    return x + y