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

So implementieren Sie geplante Django+Nginx+uWSGI-Aufgaben

WBOY
Freigeben: 2023-05-15 11:34:06
nach vorne
1557 Leute haben es durchsucht

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
Nach dem Login kopieren

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

[uwsgi]
# 进程个数
workers=1
Nach dem Login kopieren

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:
        //定时任务方法
Nach dem Login kopieren

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
Nach dem Login kopieren

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

[uwsgi]
mule = package包名/__init__.py
Nach dem Login kopieren

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!

Verwandte Etiketten:
Quelle:yisu.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage