解决多进程下APScheduler重复运行
同一个任务被执行多次,暂时猜测原因是通过uwsgi启动flask服务是多进程,每个进程启动了一个定时任务调度器,造成同一个定时任务被多次执行
flask项目初始化所调用,首先打开(或创建)一个scheduler.lock文件,并加上非阻塞互斥锁。成功后创建scheduler并启动。
如果加文件锁失败,说明scheduler已经创建,就略过创建scheduler的部分。
最后注册一个退出事件,如果这个flask项目退出,则解锁并关闭scheduler.lock文件的锁。
import fcntl
import atexit
def initscheduler(scheduler):
f = open("scheduler.lock", "wb")
try:
fcntl.flock(f, fcntl.LOCK_EX | fcntl.LOCK_NB)
# register_events(scheduler)
scheduler.start()
except:
pass
def unlock():
fcntl.flock(f, fcntl.LOCK_UN)
f.close