具有多个工人的gunicorn中的变量访问



是否有可能让多个工人与Gunicorn一起运行,并让他们以有序的方式访问一些全局变量,即没有遇到竞争条件的问题?

假设您所说的全局变量是指将它们保存在内存或磁盘上的另一个进程,是的,我认为是这样的。我没有检查过Gunicorn的源代码,但是基于我在一些旧代码中遇到的一个问题,几个用户从遗留的MyISAM表中检索相同的键,对其进行增量并使用它创建一个新条目,假设它是唯一的,可以创建一个新记录。结果是偶尔(在流量非常大的情况下)会创建一条记录(最新的记录覆盖旧的记录,所有记录都使用相同的增量键)。在硬件升级期间,当我将网站的gunicorn工作人员减少到一个时,从未发现此问题,这就是首先探索此可能原因的原因。

现在,通常,减少工作者会降低性能,最好是用事务来处理这些问题(如果您使用的是ACID RDBMS,而不是MyISAM)。同样的问题应该出现在Redis和类似的商店。

对于文件和套接字也不应该有问题,因为据我所知,操作系统会阻止其他进程(甚至子进程)访问打开的文件。

最新更新