TOP

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 

posted @ 2021-11-09 11:40  羊驼之歌  阅读(1725)  评论(0编辑  收藏  举报