django-apscheduler 在 uwsgi 环境下
问题现象
uwsgi 会根据配置启用复数个进程的django
而 APScheduler 也会依附于 django 的启动同时启动
因此在每个 APScheduler 的定时任务也会是复数个同时执行
问题处理
占用一个未用端口, 从而保证其他django启动的时候去检测
如果已被占用则不在启动, 从而实现用端口锁,
保证只会启用一个 APScheduler 进程
try:
# 利用一个占用端口来检测是否已经启动, 如已占用则说明已启动
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.bind(("127.0.0.1", 44444))
except socket.error:
print("!!!scheduler started, DO NOTHING")
else:
try:
if settings.SYNC_TASK_TOOGLE == 'true':
print('scheduler running !!!')
scheduler.start()
else:
print('No need scheduler')
except Exception as e:
# 一般是没生成表,就启动当前程序就会报错
print(e)
启用后。 其他进程在启动时将不会重复开启 APScheduler
资料参考
https://github.com/viniciuschiele/flask-apscheduler/issues/79
本文来自博客园,作者:羊驼之歌,转载请注明原文链接:https://www.cnblogs.com/shijieli/p/15528080.html