芹菜工厂功能与进口芹菜
Celery factory function vs importing celery
我正在开发 Flask 应用程序并利用蓝图。我计划使用 celery 任务队列。
我正在尝试了解使用
之类的东西的好处或原因
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():
如果您正在编写一个简单的任务,最好导入 celery 并装饰您的函数。
如果您正在创建一些复杂的任务,最好将任务子类化。在这里,您将获得 OOP 的强大功能。您可以将代码分成小块。这使得对代码进行单元测试变得更加容易。此外,如果您想要为所有任务进行一些自定义配置,您可以拥有一个自定义基类,并且可以从它继承所有任务。
我正在开发 Flask 应用程序并利用蓝图。我计划使用 celery 任务队列。 我正在尝试了解使用
之类的东西的好处或原因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():
如果您正在编写一个简单的任务,最好导入 celery 并装饰您的函数。
如果您正在创建一些复杂的任务,最好将任务子类化。在这里,您将获得 OOP 的强大功能。您可以将代码分成小块。这使得对代码进行单元测试变得更加容易。此外,如果您想要为所有任务进行一些自定义配置,您可以拥有一个自定义基类,并且可以从它继承所有任务。