芹菜工厂功能与进口芹菜

use*_*599 5 python celery flask

我正在开发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
Run Code Online (Sandbox Code Playgroud)

然后做

celery = make_celery(app) 
Run Code Online (Sandbox Code Playgroud)

并将其导入我的tasks.py,而不是仅在我的tasks.py中导入和创建芹菜实例

from celery import Celery

app = Celery('hello', broker='amqp://guest@localhost//')
@app.task
def mytask():
Run Code Online (Sandbox Code Playgroud)

Chi*_*and 2

如果您正在编写一个简单的任务,最好导入 celery 并装饰您的函数。

如果您正在创建一些复杂的任务,最好对任务进行子类化。在这里您将获得 OOP 的力量。您可以将代码分成小块。这使得对代码进行单元测试变得更加容易。此外,如果您想要为所有任务进行一些自定义配置,您可以拥有一个自定义基类,并且可以为所有任务继承它。