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

时间:2017-06-14 15:16:24

标签: django postgresql celery django-celery eventlet

我有两个芹菜工人通过eventlet汇集,配置如下:

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

一次运行100多个任务时,我会遇到错误:

  

OperationalError:致命:保留剩余的连接插槽   非复制超级用户连接

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

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

有什么想法吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

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

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

考虑整体设计:

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

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