Celery 似乎出于某种原因忽略了我的配置值。我在我的应用程序中设置了以下值config.py
BROKER_URL = 'redis://localhost:6379/0'
CELERY_RESULT_BACKEND = 'redis://localhost:6379/0'
CELERY_RESULT_ENGINE_OPTIONS = {"pool_recycle": 7200, 'echo': True}
BROKER_TRANSPORT_OPTIONS = {'visibility_timeout': 3600}
但是 celery 继续尝试连接到以下代理 url amqp://guest:**@localhost:5672//
这是我尝试配置芹菜的地方
def configure_extensions(app):
# flask-sqlalchemy
db.init_app(app)
# marshmallow
ma.init_app(app)
# bcrypt
bcrypt.init_app(app)
#celery
celery.config_from_object(app.config)
这是我的 extensions.py
# Flask-SQLAlchemy extension instance
from flask_sqlalchemy import SQLAlchemy
# flask_marshmallow extension instance
from flask_marshmallow import Marshmallow
# Bcrypt
from flask_bcrypt import Bcrypt
# flask_restful
from flask_restful import Api
#celery
from celery import Celery
celery = Celery()
db = SQLAlchemy()
ma = Marshmallow()
bcrypt = Bcrypt()
api = Api()
我app.config
在打电话之前已经打印出来了celery.config_from_object(app.config)
,它确实包括我上面列出的芹菜值。我看过关于堆栈溢出的类似帖子,但还没有找到可以回答我的问题的帖子。
我正在使用 python 3.6 和 celery 4.1
有谁知道为什么它忽略配置值?我检查了celery 文档,我认为我使用了正确的配置值
这是一个指向最小示例存储库Github Repo的链接
Celery 有 Flask 和应用程序工厂模式的问题。Miguel Grinberg 写了一篇关于它的很棒的博客文章:
https://blog.miguelgrinberg.com/post/celery-and-the-flask-application-factory-pattern
本质上,您需要在创建时传入代理 URL,而不是延迟它并稍后更新配置。
我修改了你的app/extensions.py
样子:
from celery import Celery
from . import celeryconfig
celery = Celery(__name__, broker=celeryconfig.broker_url,
backend=celeryconfig.result_backend)
现在,运行 celery worker 会产生以下结果:
bash# celery worker -A app.extensions
transport: redis://localhost:6379/0
results: redis://localhost:6379/0
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句