python - Flask + Celery 代理 redis 被覆盖
问题描述
class DevelopmentConfigLocalHost(Config):
SQLALCHEMY_DATABASE_URI = 'sqlite:///tmp/temp.db'
CELERY_BROKER_URL = "redis://localhost:6379/0"
这是非常简单的配置。至于我的工厂,我提供的是应用程序,而 celery 是全球性的。
_celery
def create_app():
global _celery
在 create_app 工厂内为我的全局 _celery 提供 create_celery。还要确保配置正常工作。确实如此。
app.config.from_object(DevelopmentConfigLocalHost())
print(app.config['CELERY_BROKER_URL'])
CORS(app, resources={
r'/document/*': {'origins': '*'},
r'/*': {'origins': '*'},
})
celery = _celery = create_celery(app)
这是我直接来自烧瓶芹菜文档的非常基本的 create_celery 工厂。
def create_celery(app):
celery = Celery(
app.import_name,
broker=app.config['CELERY_BROKER_URL']
)
celery.conf.update(app.config)
class ContextTask(celery.Task):
def __call__(self, *args, **kwargs):
with app.app_context():
return self.run(*args, **kwargs)
celery.Task = ContextTask
return celery
如果重要的话。我正在通过 wls 运行 redis 服务器。在 wls 中安装了 redis 5.0.7。对于 venv,我使用的是 3.5.3。我正在使用这个命令来运行 celery:celery -A flaskr._celery worker
- ** ---------- .> app: default:0x21648d3ca00 (.default.Loader)
- ** ---------- .> transport: amqp://guest:**@localhost:5672//
- ** ---------- .> results: disabled://
- *** --- * --- .> concurrency: 12 (prefork)
-- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker)
--- ***** -----
如您所见,正在使用 amqp 代替 redis。
enter code hereconsumer: Cannot connect to amqp://guest:**@127.0.0.1:5672//:
解决方案
韦尔普。找到了答案。我不得不从 create_app() 返回 celery。我目前正在使用main,因为出于某种原因 py flaskr 不能与init一起使用。所以新命令是 celery -A flaskr。主要的 .celery 工人非常麻烦,但我必须凑合。同样关于任务,我无法执行从init导入全局变量的惯常结构。而是必须在 create_celery 中声明它们,或者我可以只从main导入
推荐阅读
- python - 为什么我的 return 语句没有显示任何输出?
- python-3.x - NameError:名称“子弹”未定义
- r - 为什么一个 R 函数包含大约。400行代码有633Kb?
- javascript - 在 javascript+flow 中,将 ?string 发送到需要字符串的函数中
- html - 用于跟随兄弟节点和自身节点的 XPath?
- python - Flask、Marshmallow 3 和 webargs use_args 无法解析参数
- python - 从用户那里获取两个数据的烧瓶 Web 应用程序只接受一个字段中的数据
- python - 在 pythone 中打印孟加拉语
- python - 如何使python检查dict重复键而不是静默删除
- javascript - 如何从Spotify api解码数据