DisabledBackend:Celery、Redis 和 Flask 的不稳定行为

2024-02-22

我已经使用 Celery 一段时间了,在生产中我使用 RabbitMQ 作为代理,使用 Redis 作为 K8s 集群中的后端,到目前为止没有任何问题。在本地,我运行一个包含一些服务(Flask API、2 个不同的 Workers、Beat、Redis、Flower、Hasura)的 docker compose,使用 Redis 作为代理和后端。

在过去的几个月里,我没有遇到过这种设置的问题,但昨天我在访问任务结果时开始出现不稳定的行为。

任务被发送到队列,工作人员识别它并执行任务,但是在查询任务状态时我有时会得到DisabledBackend。通常在第一次请求时,然后它就起作用了。无法找到何时有效、何时无效的模式,它是不稳定的。

我在某处读到 Celery 不能很好地与 Flask 的内置服务器一起工作,所以我切换到 uWSGI,其设置与我在生产中的设置几乎相同:

[uwsgi]
wsgi-file = app/uwsgi.py
callable = application
http = :8080
processes = 4
threads = 2
master = true
chmod-socket = 660
vacuum = true
die-on-term = true
buffer-size = 32768
enable-threads = true
req-logger = python:uwsgi

我见过一个类似的问题 https://stackoverflow.com/questions/67604229/disabledbackend-error-with-every-second-reload-with-mod-wsgi-django-celery-and在 Django 中,问题似乎出在带有 Apache 的 WSGI Mod 上,这不是我的情况,但行为似乎相似。我看到的所有其他问题都与后端配置错误有关,这不是我的情况。

关于可能导致这种情况的原因有什么想法吗? 谢谢。


所以看来我需要访问AsyncResult仅通过我的 Celery 应用程序实例,而不是通过 Celery,或将 Celery 应用程序实例作为参数传递。

所以,这是行不通的:

from celery.result import AsyncResult

@app.route('/status/<task_id>')
def get_status(task_id):
    task = AsyncResult(task_id)
    return task.state

这有效:

from app import my_celery # Your own Celery Application Instance

@app.route('/status/<task_id>')
def get_status(task_id):
    task = my_celery.AsyncResult(task_id)
    return task.state

这也有效:

from app import my_celery
from celery.result import AsyncResult

@app.route('/status/<task_id>')
def get_status(task_id):
    task = AsyncResult(task_id, app=my_celery)
    return task.state

我猜发生的事情是通过调用AsyncResult直接从 Celery 中,它不会访问 Celery 的配置,因此它认为没有配置用于查询结果的后端。

但这只能解释功能的完全失败,而不能解释不稳定的行为。我猜这是因为不同的线程,以及应用程序实例很重要的情况,所以 Celery 找到了它,但不太确定。

我已经运行了几次测试,在更改导入后似乎再次正常工作AsyncResult,但我会继续挖掘。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

DisabledBackend:Celery、Redis 和 Flask 的不稳定行为 的相关文章

随机推荐

  • Golangrequirements.txt 等效项

    来自 python django 世界 如果能有一个 go revel 的类似requirements txt 的东西那就太好了 我怎样才能做到这一点 我知道我可以编写一个requirements txt 文件 然后执行类似的操作 cat
  • 直接从 numpy 进行 h.264 编码

    我想直接从视频帧的 numpy 数组中编码视频 Open cv 通过以下方式提供此类功能cv2 VideoWriter 但是我需要 h 264 编解码器 但该编解码器不可用 到目前为止 我最好的方法是使用 open cv 编写视频 然后通过
  • Telegram 机器人 - OAuth 授权

    我想在我的机器人上通过 Twitch API 实现 OAuth 授权 当我寻找更好的解决方案时 我发现了这个 GitHubBot 在此机器人重定向 URL 中 从integrations telegram org github 开始 我想知
  • Struts2 JSON 插件:添加 ActionMessages、ActionErrors 和 FieldErrors 到响应

    我正在制作 JQuery Ajax 帖子 并且想要任何actionmessages actionerrors and fielderrors添加到响应中的操作中 以 JSON 格式 我添加了这个结果
  • Android设置位图到Imageview

    您好 我有一个 Base64 格式的字符串 我想将它转换为位图 然后将其显示到 ImageView 这是代码 ImageView user image Person person object Override protected void
  • @RequestBody如何区分未发送的值和空值?

    PatchMapping update HttpEntity
  • PouchDB:过滤、排序和分页

    与这两个 CouchDB 问题非常相似 3311225 https stackoverflow com questions 3311225 couchdb sorting and filtering in the same view and
  • 如何从 Flutter 中的字符串中删除/检测整个表情符号?

    我想在 Flutter 或 Dart 中模拟字符串中的键盘退格删除事件 就像是 String str hello 你们 myBackspace str will return hello 你们 myBackspace str will re
  • 具有与区域设置无关的 ID 的 get-counter

    我正在尝试通过 cmdlet 访问以下反向路径get counter以与语言环境无关的方式 Memory Pool Nonpaged Bytes 我按照中的说明进行操作这个线程 https stackoverflow com questio
  • 网络应用程序应该具有自动更新功能吗?

    在看到 Microsoft 给人们升级 Internet Explorer 6 时遇到的一些问题以及 Firefox 如何进行自动更新后 我开始考虑我们的 Web 应用程序的推送式升级系统的优点和缺点 您认为网络应用程序应该具有自动更新功能
  • NodeJS 4 和 5 npm 安装 bcrypt 和 db-migrate 失败

    前一段时间我安装了 NodeJS v0 10 31 并在一个项目上工作没有问题 但最近我决定更新到 Node v5 0 0 一切都很好 直到我决定使用 bcrypt 和 db migrate 调用命令npm 安装将无法吐出一长串详细信息 但
  • Magento - 通过库存查找缺货产品

    在我的 Magento 商店中 在将新库存添加到缺货商品后 我有时会忘记从下拉列表中选择 有货 是否有可能以某种方式获取所有有库存但标记为 缺货 的产品的列表 如果您能够快速编写一些脚本 products Mage getModel cat
  • Django 管理员:如何过滤整数字段以获取特定范围的值

    如何在 Django Admin 中创建过滤器以仅显示整数值位于两个值之间的记录 例如 如果我有一个模型 Person 它具有年龄属性 并且我只想显示年龄在 45 到 65 之间的 Person 记录 您可以使用以下方式过滤字段querys
  • numpy:累积多重数计数

    我有一个可能有重复的有序整数数组 我想计算连续的相等值 当一个值与前一个值不同时从零重新开始 这是使用简单的 python 循环实现的预期结果 import numpy as np def count multiplicities a r
  • 用于测试私有方法的Java工具?

    对于测试私有方法的意义有不同的看法 例如 here https softwareengineering stackexchange com questions 16732 unit testing internal components a
  • 使用本机 CSS 和 HTML 设置漏斗堆栈布局样式

    我想显示类似漏斗堆栈的数据 如下图所示 我能够使用边框创建锥度 例如 div class taper div 并使用以下 CSS taper width 200px height 0px border color lightgray tra
  • 如何在应用程序启动时获取旋转进度条

    我是安卓新手 我设法将 JSON 文件解析到我的应用程序中 现在我想使用 AsyncTask 获取 Spinning ProgressBa 直到应用程序启动并加载数据 我尝试阅读很多内容 但它们只给出如何获取 onclick 事件或下载事件
  • 广播接收器 onReceive 在位置更改时触发两次

    我想知道用户何时关闭 GPS 我想了解不同活动中的这一行动 我制作了广播接收器来监听 GPS 状态的变化 但几乎总是当我关闭 GPS 时 我的 updateValue 函数会被触发两次 当用户关闭 GPS 时如何收到通知 我做错了什么 下面
  • 使用 GData 进行搜索查询的 YouTube UITableView

    我正在尝试自定义表格视图以根据搜索查询显示 YouTube 视频的提要 我找到了这段代码http pastebin com vmV2c0HT http pastebin com vmV2c0HT它在表格视图中显示 YouTube 频道的提要
  • DisabledBackend:Celery、Redis 和 Flask 的不稳定行为

    我已经使用 Celery 一段时间了 在生产中我使用 RabbitMQ 作为代理 使用 Redis 作为 K8s 集群中的后端 到目前为止没有任何问题 在本地 我运行一个包含一些服务 Flask API 2 个不同的 Workers Bea