Celery eventlet 工作线程使用过多的数据库连接

Celery eventlet worker threads using too many database connections

我有 2 个 celery worker,它们通过 eventlet 进行池化,配置如下:

celery multi start w1 w2 -A proj -l info --time-limit=600 -P eventlet -c 1000

当 运行 一次超过 100 个任务时,我遇到错误:

OperationalError: FATAL: remaining connection slots are reserved for non-replication superuser connections

我 运行 在 PostgreSQL 上最多。连接数设置为默认值 100。

根据我在网上阅读的内容,我认为池中的工作线程将共享相同的数据库连接。但是,我的似乎尝试为每个线程创建一个连接,这就是发生错误的原因。

有什么想法吗?

谢谢!

Django 有(或曾有?)空闲 数据库连接重用以避免为每个请求创建新连接的开销。闲置重用与这种情况无关。

Django 从未限制 数据库连接池。 (如有错误请指正)

考虑整体设计:

  • 您需要并发执行多少个任务? (实数通常不是 10 的好次方)
  • 您的数据库可以维持多少来自此应用程序的同时连接
  • 您是否需要设置人为瓶颈(池)或是否需要增加限制并使用可用硬件?

考虑使用外部 [Postgresql 连接池](google 方括号中的术语)或在您的应用程序中的某处包含一个。