![](/img/trans.png)
[英]How to pass configuration parameters to a Celery task in a Flask app?
[英]How to organize celery task in simple python flask app?
我有一个使用Celery的简单烧瓶应用程序。 现在,代码看起来像这样。
这是我的server.py,它位于根目录下
from flask import Flask, request, jsonify
import os
import json
import logging
import requests
import sys
app = Flask(__name__)
# app.debug = True
app.config.update(
CELERY_BROKER_URL=config.get('REDISTOGO_URL'),
CELERY_RESULT_BACKEND=config.get('REDISTOGO_URL'),
)
celery = make_celery(app)
@celery.task(bind=False, default_retry_delay=30)
def convert(gif_url, webhook):
// Do some heavy lifting task
@app.route("/convert", methods=["POST"])
def convert():
// Call the task
这是我的make_celery(app)
from celery import 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
我感到困惑的原因是,如果将任务提取到另一个名为convert_task.py
文件中,则该文件必须导入app
和make_celery
并且在应用程序中必须导入convert_task.py
我尝试了,我得到了
无法导入名称“ app”
什么是组织这种Python方式。 我们这样做的原因是我们将更多任务添加到server.py
,我不希望这成为一个上帝文件。
您可能正在获取循环导入 。
您可以通过执行以下任一操作来修复它:
将失败的导入移动到文件底部。
将导入移动到正在使用导入的函数中(不在模块的顶层)。
重新组织模块,以便convert_task
和server
都从第三个模块导入,而第三个模块不从这两个文件中的任何一个导入。
如果仍然有问题,请发布文件的确切布局以及正在导入的内容。 用几行代码(不包括烧瓶/芹菜专用的东西)重现该问题应该很容易。
我一直在开发使用Celery的Flask应用,因此这是对我有用的:
make_celery
在创建应用程序实例的同一文件中定义(在您的情况下看起来像server.py
) tasks.py
中定义,该文件与server.py
位于同一目录中。 这也是我实例化我的celery对象的地方(来自make_celery
) 希望对您有所帮助,如果您对我如何组织应用程序还有其他疑问,请告诉我。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.