芹菜工厂功能与进口芹菜



我正在开发一个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的强大功能。您可以将代码分解为小块。这样可以更轻松地对代码进行单元测试。 此外,如果你想为所有任务提供一些自定义配置,你可以有一个自定义基类,你可以从中继承所有任务。

相关内容

  • 没有找到相关文章

最新更新