- A+
所属分类:python
保证只能运行一个脚本实例,方法是程序运行时监听一个特定端口,如果失败则说明已经有实例在跑。
使用装饰器实现,便于重用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
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 |
在脚本的主函数上使用:
1 2 3 |
@just_one_instance main(): do sth. |

微信公众号
扫一扫关注运维生存时间公众号,获取最新技术文章~
29/08/2014 上午 11:01 沙发
标准的做法是写pid文件,用信号0来测试吧?
19/10/2014 下午 3:01 1层
@Adam 我这种比较偷懒,哈。