我有 2 个芹菜工人通过 eventlet 汇集,配置如下:
celery multi start w1 w2 -A proj -l info --time-limit=600 -P eventlet -c 1000
一次运行超过 100 个任务时,我遇到以下错误:
操作错误:致命:剩余的连接插槽保留用于 非复制超级用户连接
我在PostgreSQL上运行,最大连接数设置为默认值100。
从我在网上阅读的内容来看,我认为池中的工作线程将共享相同的数据库连接。但是,我的似乎尝试为每个线程创建一个连接,这就是发生错误的原因。
有什么想法吗?
谢谢!
Django 有(或曾经?(空闲的数据库连接重用,以避免为每个请求创建新连接的开销。在这种情况下,空闲重用无关紧要。
Django 从来没有限制数据库连接池。(如有错误请指正(
考虑整体设计:
- 您需要同时执行多少个任务?(实数通常不是 10 的好幂(
- 您的数据库可以承受多少个来自此应用程序的同时连接?
- 您是否需要放置人为瓶颈(池(,还是需要增加限制并使用可用的硬件?
考虑使用外部[Postgresql连接池](方括号中的Google术语(或在应用程序中的某个位置包含一个。