我正在开发Flask应用程序并利用蓝图。我计划使用芹菜任务队列。 我试图理解使用像
这样的好处或理由def make_celery(app):
celery = Celery(app.import_name, broker=app.config['CELERY_BROKER_URL'])
celery.conf.update(app.config)
TaskBase = celery.Task
class ContextTask(TaskBase):
abstract = True
def __call__(self, *args, **kwargs):
with app.app_context():
return TaskBase.__call__(self, *args, **kwargs)
celery.Task = ContextTask
return celery
然后做
celery = make_celery(app)
并将其导入我的tasks.py,而不是仅在我的tasks.py中导入和创建芹菜实例
from celery import Celery
app = Celery('hello', broker='amqp://guest@localhost//')
@app.task
def mytask():
答案 0 :(得分:2)
如果您正在编写一个简单的任务,最好导入celery&装饰你的功能。
如果您要创建一些复杂的任务,最好是升级任务。在这里你将获得OOP的力量。您可以将代码分成小块。这样可以更轻松地对代码进行单元测试。此外,如果您想为所有任务设置一些自定义配置,您可以拥有一个自定义基类&你可以从中继承所有的任务。