问一下大佬们, 如何保证在 windows 系统上面这个 Python 进程最多只有一个在运行

2021-06-11 20:24:49 +08:00
 18870715400

例如下面的代码文件 hello.py


import time

import subproctitle
while 1:
    pass

运行该文件 python hello.py , 如果当前系统已经有这个进程在运行了, 则直接这个文件报错不运行或者其它的, 但是如果没有的话则启动这个文件, 一开始用 setproctitle 这个文件, 设置一个专门的进程名字来检测, 但是 setproctitle 在 windows 上好像 失效了, 那么还有什么方法么?

2352 次点击
所在节点    Python
16 条回复
youngzy
2021-06-11 20:28:19 +08:00
如果自用的话可以考虑占用一个高位端口
NoahNye
2021-06-11 20:33:22 +08:00
直接注册成服务运行
hs0000t
2021-06-11 20:34:13 +08:00
占端口+1
18870715400
2021-06-11 20:47:22 +08:00
@hs0000t 谢谢, 这个方法可行
18870715400
2021-06-11 20:52:42 +08:00
@youngzy 但是如果需要保证 100% 准确的话, 端口一开始还有可能被其它程序占用, 那么还有其它什么方法么
abersheeran
2021-06-11 20:56:39 +08:00
@18870715400 利用 Windows 的文件特性。只要有一个进程拿到了一个文件的写入权限,其他进程想以写入模式打开这个文件就会报错。
xupefei
2021-06-11 20:59:09 +08:00
mutex
pid
Jirajine
2021-06-11 21:10:05 +08:00
常用的办法是通过文件来模拟 lock,很多很多程序都这么干。像 cargo/pacman/borg 等等。
18870715400
2021-06-11 21:43:01 +08:00
@Jirajine 好的, 谢谢.
ClericPy
2021-06-11 21:49:13 +08:00
很多软件确实留一个 pid lock 在目录下面, 每次读取这个目录下面的 pid 看看是否存活

印象中 gunicorn 就有一个类似的
typetraits
2021-06-11 22:26:15 +08:00
Rhilip
2021-06-12 17:05:10 +08:00
我赞同 L8 的观点,用 FileLock
https://pypi.org/project/filelock/
ho121
2021-06-12 20:50:16 +08:00
Akiya
2021-06-13 00:13:36 +08:00
通常做法是文件锁
402124773
2021-06-13 10:03:13 +08:00
之前做了个小工具,要检测某个 python 的进程是否一直在运行,用 cmd 脚本,tasklist 命令去循环
qile1
2021-06-20 21:18:35 +08:00
使用文件锁可以实现

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/782998

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX