Django 芹菜eventlet工作线程使用过多的数据库连接

Django 芹菜eventlet工作线程使用过多的数据库连接,django,postgresql,celery,django-celery,eventlet,Django,Postgresql,Celery,Django Celery,Eventlet,我有2名芹菜工人,他们通过eventlet汇集,配置如下: celery multi start w1 w2 -A proj -l info --time-limit=600 -P eventlet -c 1000 当一次运行100多个任务时,我会遇到以下错误: 操作错误:致命:剩余的连接插槽保留给 非复制超级用户连接 我在PostgreSQL上运行,最大连接数设置为默认值100 从我在线阅读的内容来看,我认为池中的工作线程将共享相同的DB连接。但是,我的线程似乎试图为每个线程创建一个连接,这

我有2名芹菜工人,他们通过eventlet汇集,配置如下:

celery multi start w1 w2 -A proj -l info --time-limit=600 -P eventlet -c 1000
当一次运行100多个任务时,我会遇到以下错误:

操作错误:致命:剩余的连接插槽保留给 非复制超级用户连接

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

从我在线阅读的内容来看,我认为池中的工作线程将共享相同的DB连接。但是,我的线程似乎试图为每个线程创建一个连接,这就是错误发生的原因

有什么想法吗

谢谢

Django已经(或者已经)重用空闲数据库连接,以避免为每个请求创建新连接的开销。空闲重用与此场景无关

Django从来没有限制数据库连接池。(如有错误,请更正)

考虑总体设计:

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

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

您是否为psycopg安装了monkeypatched?修补psycopg可能无法解决此问题。@Leb您是否提出了任何解决方案?谢谢@temoto,我进行了快速搜索,并将首先尝试使用PgBouncer进行事务池。由于我的应用程序处于测试阶段,我还没有很好地估计并发任务和并发连接的数量,但我知道它们是以大批量而不是小的稳定流的形式出现的。两个简短的问题:1。通过人工瓶颈(池),您是指PostgreSQL连接池吗?2.增加限制将增加PostgreSQL中的最大连接数。SQL还更新相关设置以支持这种增加?池指任何池,包括应用程序中的pgbouncer或20行代码池。增加限制就是找到瓶颈限制并增加它,包括postgresql配置、应用程序、操作系统内核和任何其他。