有没有办法确定多个用户是否正在运行特定的Python脚本?

2024-04-25 10:25:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个脚本,它可以由任何连接到服务器的用户运行。此脚本写入单个日志文件,但对一次可以使用它的用户没有限制。因此,多人可能试图写入日志,数据可能会丢失。有没有办法让一个代码实例知道该代码的其他实例是否正在运行?此外,是否有可能动态收集这些信息?(即在第一个用户完成任务之前,不允许为第二个用户保存数据)

我知道我可以用一个文本文件。因此,我可以在开始时将用户名写入文件,然后在完成时将其删除,但如果其中任何一个步骤都未完成,则这可能会导致错误,例如脚本意外终止。那么还有什么可靠的方法呢?你知道吗

有关系统的一些信息:Python2.7通过Anaconda安装在Windows7 64位服务器上。所有连接的计算机也是64位Windows 7。提前谢谢


Tags: 文件数据实例方法代码用户服务器脚本
2条回答

下面是一个实现:

http://www.evanfosmark.com/2009/01/cross-platform-file-locking-support-in-python/

如果您使用的是锁,请注意过时的锁(由挂起或崩溃的进程留下的锁)可能是个麻烦。有一个进程定期搜索创建时间超过X分钟的锁并释放它们。你知道吗

允许多个用户写入一个日志并希望一切正常,这是不干净的。。 为什么不编写一个处理日志的守护进程呢?其他进程连接到一个“日志端口”,在最简单的情况下,只有在没有其他进程连接的情况下,它们才会成功。 您只需修改这里给出的echoserver示例:(在服务器中为所有连接保留一个超时)

http://docs.python.org/release/2.5.2/lib/socket-example.html

如果您想确切地知道谁记录了什么,并确保没有未经授权的人进入,您可以使用unixsockest将其限制为仅限于某些uid/gid等。 here is a very good example

NTEventLogHandler可能是登录到给定Windows计算机/服务器的最简单方法,但是如果Unix服务器上有syslog接收器,那么使用SyslogHandler可能更有意义。你知道吗

我能想到的SyslogHandler问题是,为了通过syslog协议(即514/TCP(“可靠的syslog”)和514/UDP(传统的或“不可靠的syslog”)发送数据包,您可能需要在Windows防火墙上打洞。你知道吗

相关问题 更多 >