小编10c*_*ool的帖子

为什么一个基本的 Celery 应用程序,什么都不做,需要 8 个开放的 Redis 连接?

试图更全面地了解 Celery/Kombu 和 Redis 如何在幕后交互,以更好地扩展项目和设备成本(特别是在我希望尽可能最小的 Redis 设置并因此最少连接的开发环境中)。

我未能在 Celery 或 Kombu 用户指南中找到我正在寻找的有关此主题的特定文档。

以下所有假设和问题都基于我使用没有任务的 Celery 应用程序运行的测试(只是app = Celery("DatabaseWorker", broker=redis_uri)),然后只是坐在那里什么也不做,并使用 redis-cli 工具(使用实时监控选项更新)。我启动了一个这种类型的工人并获得了我的 8 个开放连接。

寻找答案或更正我错误的假设:

  1. 为什么所有 8 个连接都保持打开状态?这是否与每个连接都来自一个池并因此永远不会关闭的事实有关?

  2. 如果它与池相关,那么为什么设置如下值celeryconfig.py仍然会导致 8 个连接(这两个选项似乎都不起作用)

    BROKER_TRANSPORT_OPTIONS = {
        max_connections': 5,
    }
    BROKER_POOL_LIMIT = 5
    
    Run Code Online (Sandbox Code Playgroud)
  3. 两 (2) 个连接似乎与celeryev(用于监控工具)相关联。一种用于发布消息(发出PUBLISH命令),一种用于订阅 ( PSUBSCRIBE)。我可以使用--without-hearbeat(以前不使用CELERY_SEND_EVENTS配置变量)保存连接来关闭发布。我也可以阻止订阅连接吗?在我想要尽可能少的连接并且不关心监视杀死两者的开发环境中,这会很棒。

  4. 四 (4) 个连接遵循这种模式,它们检查某些队列/集合/键的存在,然后在集合中设置一个值。但是还没有关闭。为什么?例如:

    1449649220.026758 [0 [::1]:57605] "INFO"
    1449649220.027633 [0 [::1]:57605] "MULTI"
    1449649220.027655 [0 [::1]:57605] "LLEN" "celery@xxxxxx-MacBook-Pro.local.celery.pidbox"
    1449649220.027665 [0 [::1]:57605] "LLEN" "celery@xxxxxx-MacBook-Pro.local.celery.pidbox\x06\x163"
    1449649220.027674 [0 [::1]:57605] …
    Run Code Online (Sandbox Code Playgroud)

python connection redis celery kombu

5
推荐指数
0
解决办法
535
查看次数

标签 统计

celery ×1

connection ×1

kombu ×1

python ×1

redis ×1