Eu tenho um aplicativo Flask-SQLAlchmey em execução no Gunicorn conectado a um banco de dados PostgreSQL, e estou tendo problemas para descobrir qual pool_size
deve ser o valor e quantas conexões de banco de dados devo esperar.
Esta é minha compreensão de como as coisas funcionam:
- Os processos no Python 3.7 NÃO compartilham memória
- Cada trabalhador Gunicorn é seu próprio processo
- Portanto, cada trabalhador Gunicorn obterá sua própria cópia do pool de conexão com o banco de dados e não será compartilhado com nenhum outro trabalhador
- Threads no Python compartilham memória
- Portanto, quaisquer threads em um trabalhador do Gunicorn compartilharão um pool de conexão com o banco de dados
Isso está correto até agora? Se isso estiver correto, para um aplicativo Flask síncrono em execução no Gunicorn:
- O número máximo de conexões com o banco de dados é = (número de trabalhadores) * (número de threads por trabalhador)?
- E dentro de um trabalhador, ele utilizará mais conexões de um pool do que os trabalhadores?
Existe uma razão pela qual pool_size
deve ser maior que o número de threads? Então, para um aplicativo gunicorn lançado com gunicorn --workers=5 --threads=2 main:app
deveria pool_size
ser 2? E se eu estiver usando apenas trabalhadores, e não usando threads, existe algum motivo para ter um pool_size
maior que 1?
fonte