V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
18870715400
V2EX  ›  Python

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

  •  
  •   18870715400 · 2021-06-11 20:24:49 +08:00 · 2087 次点击
    这是一个创建于 1021 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    
    import time
    
    import subproctitle
    while 1:
        pass
    
    

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

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

    印象中 gunicorn 就有一个类似的
    typetraits
        11
    typetraits  
       2021-06-11 22:26:15 +08:00
    Rhilip
        12
    Rhilip  
       2021-06-12 17:05:10 +08:00   ❤️ 1
    我赞同 L8 的观点,用 FileLock
    https://pypi.org/project/filelock/
    ho121
        13
    ho121  
       2021-06-12 20:50:16 +08:00 via Android
    Akiya
        14
    Akiya  
       2021-06-13 00:13:36 +08:00 via iPad
    通常做法是文件锁
    402124773
        15
    402124773  
       2021-06-13 10:03:13 +08:00
    之前做了个小工具,要检测某个 python 的进程是否一直在运行,用 cmd 脚本,tasklist 命令去循环
    qile1
        16
    qile1  
       2021-06-20 21:18:35 +08:00 via Android
    使用文件锁可以实现
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1430 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 37ms · UTC 17:27 · PVG 01:27 · LAX 10:27 · JFK 13:27
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.