python保证只能运行一个脚本实例

fmnisme python219,1371字数 437阅读1分27秒阅读模式

保证只能运行一个脚本实例,方法是程序运行时监听一个特定端口,如果失败则说明已经有实例在跑。

使用装饰器实现,便于重用文章源自运维生存时间-https://www.ttlsa.com/python/python-just-one-instance/

import functools
def just_one_instance(func):
    '''
    装饰器
    如果已经有实例在跑则退出
    :return:
    '''
    @functools.wraps(func)
    def f(*args,**kwargs):
        import socket
        try:
# 全局属性,否则变量会在方法退出后被销毁
            global s 
            s = socket.socket()
            host = socket.gethostname()
            s.bind((host, 60123))
        except:
            print('already has an instance')
            return None
        return func(*args,**kwargs)
    return f

在脚本的主函数上使用:文章源自运维生存时间-https://www.ttlsa.com/python/python-just-one-instance/

@just_one_instance
main():
    do sth.
文章源自运维生存时间-https://www.ttlsa.com/python/python-just-one-instance/文章源自运维生存时间-https://www.ttlsa.com/python/python-just-one-instance/
weinxin
我的微信
微信公众号
扫一扫关注运维生存时间公众号,获取最新技术文章~
fmnisme
  • 本文由 发表于 17/08/2014 14:33:40
  • 转载请务必保留本文链接:https://www.ttlsa.com/python/python-just-one-instance/
评论  2  访客  2
    • Adam
      Adam 9

      标准的做法是写pid文件,用信号0来测试吧?

        • fmnisme
          fmnisme

          @ Adam 我这种比较偷懒,哈。

      评论已关闭!