一个lock file的python
实现
此代码基于实际业务出发,且已应用于线上生产环境(已脱敏)
需求背景:python脚本项目,实现同一个脚本不能同时执行,需要在具体的脚本执行前加锁控制
需求实现方案:
1.基于文件的python的文件锁
2.基于端口号的端口锁(已测试在并发环境下锁不住)
python文件锁实现方案:
如果多个进程,或者多个独立程序要写同一个文件,那么就存在大家同时写文件的可能,这时就需要具体的脚本执行前加锁,控制并发
文件名:lockfile.py
import os
import time
import errno
class FileLockException(Exception):
pass
class FileLock(object):
def __init__(self, file_name, timeout=10, delay=.05):
self.is_locked = False
# 将锁文件放置统一位置,方便管理
dirs = sys.path[0] + "/lock"
if not os.path.exists(dirs):
os.makedirs(dirs)
self.lockfile = os.path.join(dirs, "%s.lock" % file_name)
self.file_name = file_name
self.timeout = ti