我正在寻找简单的方法来监控和限制终端服务器(2003 和 2008)下我们的应用程序实例的数量。
此限制的目的是确保我们不会超载我们的服务器。这是内部管理要求 - 我不是在寻找许可解决方案。
有问题的应用程序是用 Python 2.6(32 位)编写的,但我很高兴收到与开发工具无关的答案。虽然我们没有使用 Citrix,但我很高兴收到与 Citrix 相关的想法,希望我可以在终端服务器上使用类似的技术。
我正在寻找简单的方法来监控和限制终端服务器(2003 和 2008)下我们的应用程序实例的数量。
此限制的目的是确保我们不会超载我们的服务器。这是内部管理要求 - 我不是在寻找许可解决方案。
有问题的应用程序是用 Python 2.6(32 位)编写的,但我很高兴收到与开发工具无关的答案。虽然我们没有使用 Citrix,但我很高兴收到与 Citrix 相关的想法,希望我可以在终端服务器上使用类似的技术。
您的应用程序的各种实例需要某种方式相互通信。当一个实例启动时,它会问一个问题,“有多少已经在运行?”。如果超过了 allowed n
,则选择不启动。
一种实现方法可能是使n
文件锁定n
您允许同时运行的应用程序实例。然后,应用程序尝试锁定其中一个文件;如果不能,它会立即退出。完成后释放锁,但如果你崩溃,操作系统可能会为你释放锁。
另一种方法是在启动时在中央位置(某个数据库)中注册一些每个进程的唯一信息(PID?)。
第三种可能是使用仅主机网络服务器,其中专用服务器程序或其中一个实例协调与其他实例的通信。如果主机退出,其他实例之一可以自我提升为服务器。
根据对 Python Win32 API 邮件列表的反馈,我也在考虑以下技术之一:
使用 Windows 信号量
使用互斥池(提供比信号量更好的可恢复性)
使用一系列端口