使用文件锁保证定时任务只启动一次
def singleton_scheduler():
"""文件锁实现单例定时启动"""
import os
import platform, atexit
def start_scheduler():
if platform.system() != "Windows":
print('开始执行')
# path = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'scheduler.lock')
pid_file = open("scheduler.lock", "wb")
try:
import fcntl
fcntl.flock(pid_file, fcntl.LOCK_EX | fcntl.LOCK_NB) # 创建一个排他锁,并且所被锁住其他进程不会阻塞
start_scheduler()
except IOError as e:
print("已经有一个实例在运行")
except ModuleNotFoundError as e:
print("windows 没有这个fcntl模块, 定时任务未启动")
def unlock():
print('退出回调')
fcntl.flock(pid_file, fcntl.LOCK_UN)
pid_file.close()
'''注册一个退出回调函数,用于在程序退出时进行一些清理工作,关闭文件,解除锁'''
atexit.register(unlock)
sin