Heim >Betrieb und Instandhaltung >Nginx >So implementieren Sie geplante Django+Nginx+uWSGI-Aufgaben

So implementieren Sie geplante Django+Nginx+uWSGI-Aufgaben

WBOY
WBOYnach vorne
2023-05-15 11:34:061506Durchsuche

Abstract

Wenn Nginx und uWSGI nicht konfiguriert wurden, verwenden Sie apscheduler, um geplante Aufgaben nur in url.py einzurichten, und verwenden Sie den Python-Run-Server manage.py, der normal, aber danach ausgeführt wird Die Konfiguration von uWSGI ist abgeschlossen, der Einstiegspunkt ändert sich von manage.py zu uwsgi.py, was Benutzerzugriff erfordert, um die geplante Apscheduler-Aufgabe von url.py zu laden, und dieselbe geplante Aufgabe wird wiederholt mit der Anzahl der Benutzerbesuche gestartet.

UWSGI-Cron verwenden

Methode 1: Migrieren Sie die geplante Apscheduler-Aufgabe von url.py nach uwgsi.py

Methode 2: Verwenden Sie uWSGI-Cron# 🎜🎜#

Offizielle Cron-Website von uWSGI: https://uwsgi-docs-zh.readthedocs.io/zh_CN/latest/Cron.html

end=1
while end:
    try:
        import uwsgi
        //建立job_id为0,每天12:12启动fuc的定时器,-1代表*(全部)
        uwsgi.register_signal(0, "", fuc)
        uwsgi.add_cron(0, 12,12,-1,-1,-1)
        end=0
    except:
        pass

Methode eins oder Methode zwei sind beide Sie uwsgi.ini worker=1

[uwsgi]
# 进程个数
workers=1

Socket.bind lock

Die Verwendung von uWSGI cron ist nur auf einen einzelnen Prozess beschränkt, was dazu führt Timer Bei wiederholten Startproblemen können Sie die Socket.bind-Sperre verwenden, um die geplante Aufgabe zu ändern.

    try:
        import socket
        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        sock.bind(("127.0.0.1", 47200))
    except socket.error:
        logger.info('禁止成功')
    else:
        //定时任务方法

Es liegt ein Problem vor. Möglicherweise wird gleichzeitig sock.bind(("127.0.0.1", 47200)) abgerufen, was das Duplizierungsproblem lindern kann, aber nicht vollständig gelöst werden kann .

UWSGI Mule verwenden

Der erste Schritt: Erstellen Sie ein neues Paket und schreiben Sie __init__.py

//如果是Django项目,需要加上才可以使用django的model
//import django
//os.environ.setdefault('DJANGO_SETTINGS_MODULE', '项目名.settings')
//django.setup()

from apscheduler.schedulers.background import BackgroundScheduler
scheduler = BackgroundScheduler()
//scheduler.add_job不详说,具体看官网文档
scheduler.add_job(...,timezone='Asia/Shanghai')
scheduler.start()
try:
    import uwsgi
    while True:
        sig = uwsgi.signal_wait()
except Exception as err:
    pass

Der zweite Schritt: Richten Sie uwsgi.ini ein , füge hinzu mule = package package name/init.py

[uwsgi]
mule = package包名/__init__.py

Das obige ist der detaillierte Inhalt vonSo implementieren Sie geplante Django+Nginx+uWSGI-Aufgaben. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen