Gunicornで実行中のFlask-SQLAlchmeyアプリをPostgreSQLデータベースに接続していて、そのpool_size
値が何であるか、また予想されるデータベース接続の数を見つけるのに苦労しています。
これは、物事がどのように機能するかについての私の理解です:
- Python 3.7のプロセスはメモリを共有しない
- 各Gunicornワーカーは独自のプロセスです
- したがって、各Gunicornワーカーは、データベース接続プールの独自のコピーを取得し、他のワーカーと共有されません。
- Pythonのスレッドはメモリを共有します
- したがって、Gunicornワーカー内のすべてのスレッドは、データベース接続プールを共有します
これまでのところ正しいですか?それが正しい場合、Gunicornで実行されている同期Flaskアプリの場合:
- データベース接続の最大数=(ワーカー数)*(ワーカーあたりのスレッド数)?
- そして、ワーカー内で、ワーカーよりもプールからの接続を多く使用しますか?
pool_size
スレッド数よりも大きくする必要がある理由はありますか?だから、で起動したgunicornアプリの場合は2 でgunicorn --workers=5 --threads=2 main:app
なければpool_size
なりませんか?また、ワーカーを使用し、スレッドを使用していないpool_size
場合、1より大きい値を使用する理由はありますか?