无法从烧瓶应用程序导入芹菜对象



我正在尝试将芹菜与烧瓶应用程序学习和整合。我尝试链接中提到的内容:烧瓶芹菜

,但我想在单独的模块中移动所有异步任务。因此,这是我的GIT存储库,我正在进行更改:信标repo

所以我在 beacons/__init__.py中初始化芹菜对象:

from beacons.async import make_celery

mq_url = 'amqp://mq:mq@localhost/localhost'

app = Flask(__name__)
app.config.update(
    CELERY_BROKER_URL=mq_url,
    CELERY_BACKEND=mq_url
)
log_handler = logging.StreamHandler()
log_handler.setLevel(logging.DEBUG)
log_handler.setFormatter(Formatter(
    'n-------------------------------------n'
    'TIME: %(asctime)s n'
    'LEVEL: %(levelname)s n'
    'MESSAGE: %(message)s n'
    'FILE: %(pathname)s n'
    'LINE: %(lineno)d'
    'n-------------------------------------n'))
app.logger.addHandler(log_handler)
app.register_blueprint(portal, url_prefix='/beacons')
app.register_blueprint(apis, url_prefix='/beacons/apis')
celery = make_celery(app)

__all__ = ['celery']

我的make_celerybeacons/async/__init__.py中如下:

from celery import Celery

def make_celery(app):
    celery = Celery(app.import_name, backend=app.config['CELERY_BACKEND'],
                    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

我创建了另一个模块beacons/tasks.py,它是:

from beacons import celery

@celery.task()
def add(x, y):
    return x + y

我在我的一个视图中使用此模块beacons/portal/view/rest_apis.py如下:

from beacons.tasks import add
@apis.route('/add', methods=['POST'])
def add_page():
    x = request.form.get('x')
    y = request.form.get('y')
    task = add.delay(x, y)
    return json_response(
        {"id": task.id}, status_code=200)

当我尝试运行芹菜工人和烧瓶应用程序时,我会收到此错误:

    from beacons import celery
ImportError: cannot import name celery

我如何将beacons模块中写入的芹菜对象导入其子模块或任务本身中。请参阅GIT存储库以获取完整的代码。

我尝试运行您的代码,而不会收到此错误。我在您的run.py中评论您的系统论点,并在下面留下此代码。

if __name__ == '__main__':
    app.secret_key = str(uuid.uuid4())
    port = '9000'
    app.run(debug=False, port=port, host='0.0.0.0')

然后我执行python run.py在此处输入图像描述

然后,我请用127.0.0.1:9000邀请烧瓶,并在此处获取此Enter Image Description

烧瓶工作正常,除了记录格式错误,此错误不在主题中。

您是否请您发布您执行的命令以及执行的目录?我认为您的工作目录可能会带领这个Importerror。

ps:您在github中给出的分支代码与此问题中的代码帖子不同。

相关内容

  • 没有找到相关文章

最新更新