关于Gunicorn部署Flask的多进程问题

你好李辉先生,我读了你的Flask Web实战书籍,仍有一些疑问:

1、你的CatChat程序使用全局变量统计在线人数的个数。

 但据我所知,Gunicorn的不同worker之间不会共享变量,所以这里可否改用Redis?

2、CatChat在不同worker中运行的时候,会导致消息不能在不同worker之间广播,我认为可以使用Redis的消息队列。

3、在连接数据库时,Gunicorn的不同worker之间是共用一个连接还是分别创建不同的连接?

 如果两个worker同时使用一个sqlite文件(.db)会不会有安全性问题?

4、我对于flask-sqlalchemy仍然不太了解,比如我有一个转账系统,需不需要额外加锁?我看你书里的代码从不加锁,或者Flask-Sqlalchemy会自动加锁?

有趣的问题,我最近刚遇到uwsgi 多进程启动类似的问题。
是的,多进程启动的话和分布式系统就一样了,都是互相不共享变量,那就只能依赖外部系统,你可以选择redis,mysql,或者 uwsgi自己就提供了一个缓存手段:
https://uwsgi-docs.readthedocs.io/en/latest/Caching.html#web-caching

我猜Gunicorn 也是如此。

似乎 Gunicorn 并不内置支持。

那看来只有用自己搭建的外部缓存系统了