我正在开发一个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():
如果你正在编写一个简单的任务,最好导入芹菜并装饰你的函数。
如果您正在创建一些复杂的任务,最好将任务进行子化。在这里,您将获得OOP的强大功能。您可以将代码分解为小块。这样可以更轻松地对代码进行单元测试。 此外,如果你想为所有任务提供一些自定义配置,你可以有一个自定义基类,你可以从中继承所有任务。