防止 IIS 上的 Flask 应用的多个实例



我们开发了一个 Flask Web 应用程序,并希望将其部署到 IIS 上。在开发过程中,我们通过flask run启动了应用程序,它打开了我们应用程序的单个实例。但是,在 IIS 上,我们观察到(通过任务管理器)我们的应用同时运行多个实例。

问题是我们的应用程序不是为并行运行而设计的。例如,我们的应用程序从文件系统中读取文件并将其保存在内存中以提高效率。仅当保证没有其他进程更改文件内容时,此优化才是正确的。

有没有办法防止IIS启动多个实例?

在IIS中,您可以转到FastCGI设置,在那里您可以看到服务器上网站使用的所有应用程序。在"最大实例数"列中,您正在谈论的脚本可能设置为 0(或大于 1 的某个值),这意味着它可以多次启动。将其限制为 1 将解决您的问题。

您可以使用以下代码仅运行程序的一个实例:

from tendo import singleton
me = singleton.SingleInstance() # will sys.exit(-1) if other instance is running

要安装的命令:

pip install tendo

参考链接:

检查 python 脚本是否正在运行

如何使同一脚本的一个实例在任何时候都只运行

https://github.com/pycontribs/tendo/blob/master/tendo/singleton.py

最新更新