是否可以让多个工作人员与 Gunicorn 一起运行,并让他们以有序的方式访问一些全局变量,即不会遇到竞争条件问题?
最佳答案
假设全局变量是指将它们保存在内存或磁盘上的另一个进程,是的,我认为是这样。我没有检查 Gunicorn 的源代码,但基于我在一些旧代码中遇到的问题是几个用户从遗留 MyISAM 表中检索相同的 key ,递增它并使用它创建一个新条目假设它是独树一帜,创造新记录。结果是偶尔(在非常繁忙的流量下)创建一条记录(最新的记录覆盖旧的记录,所有记录都使用相同的递增键)。在硬件升级期间从未观察到这个问题,当我将网站的 gunicorn workers 减少到一个时,这就是首先探索这个可能原因的原因。
现在通常,减少工作人员会降低性能,最好用事务来处理这些问题(如果您使用的是 ACID RDBMS,与 MyISAM 不同)。 Redis 和类似商店中应该存在同样的问题。
此外,这不应该是文件和套接字的问题,因为据我所知,操作系统会阻止其他进程(甚至子进程)访问打开的文件。
https://stackoverflow.com/questions/23653170/