我使用 Python 程序来管理 MySQL 数据库,并且想在虚拟机上运行该程序和数据库,以便多个用户可以访问和使用它。我对此有两个问题:
- 如果多个用户使用 Python 脚本,他们会影响彼此的全局变量吗?
- 操作系统或 Python 是否可以只允许一个用户同时使用该应用程序?
答案1
如果多个用户使用 Python 脚本,他们会影响彼此的全局变量吗?
不。脚本本身只是一个普通的文本文件;它没有附加任何状态。所有全局变量都不属于脚本,而是属于过程正在执行它。
甚至由同一用户还是不同用户运行都无关紧要。每次运行脚本时,操作系统都会使用解释器的新副本启动一个新进程,而解释器本身则以“空白页”的形式启动 - 它不会加载任何状态,也不会存储任何状态,除非您将状态编码到脚本本身中。
(打开一个记事本窗口。打开第二个记事本窗口。在两个窗口中输入一些文本。请注意,每个窗口中可以有不同的文本,即使两个都是同一个 Notepad.exe。这实际上不是一个很好的类比,但它无论如何都可以完成工作。)
操作系统或 Python 是否可以只允许一个用户同时使用该应用程序?
您需要编写 Python 代码来强制执行此类限制,操作系统可能会提供相关功能来帮助实现这一点。搜索“锁定”。
(但是,许多方法只能在同一个用户帐户内起作用,或者至少需要 root/管理员权限才能设置 - 例如,Windows 上的“互斥锁”或“信号量”只能由管理员设为全局,否则只有创建它的同一用户才能看到它。)
一种方法是依赖文件锁定。让脚本打开一个空文件并fcntl.flock()
在 Linux/macOS 或win32file.LockFileEx()
Windows 上使用。
由于脚本管理 MySQL 数据库,因此您也可以在数据库本身内保存状态。使用起来应该很可靠GET_LOCK()
和RELEASE_LOCK()
SQL 函数。(有些工具还通过创建一个单独的“锁定”表来实现这一点,该表包含指示锁定内容的条目,但要做到这一点很棘手。)