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 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM