Rumah  >  Artikel  >  Operasi dan penyelenggaraan  >  Bagaimana untuk melaksanakan tugas berjadual Django+Nginx+uWSGI

Bagaimana untuk melaksanakan tugas berjadual Django+Nginx+uWSGI

WBOY
WBOYke hadapan
2023-05-15 11:34:061461semak imbas

Ringkasan

Apabila Nginx dan uWSGI belum dikonfigurasikan, gunakan apscheduler untuk menyediakan tugas berjadual dalam url.py sahaja dan gunakan pelayan run python manage.py, yang berjalan seperti biasa; uWSGI selesai, entri adalah daripada perubahan manage.py kepada uwsgi.py, yang memerlukan akses pengguna untuk memuatkan tugas berjadual apscheduler url.py, dan tugas berjadual yang sama dimulakan berulang kali dengan bilangan lawatan pengguna.

Gunakan cron uWSGI

Kaedah 1: Pindahkan tugas berjadual apscheduler url.py ke uwgsi.py

Kaedah 2: Gunakan cron uWSGI

uWSGI's laman web rasmi: 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

Kaedah satu atau dua memerlukan tetapan pekerja=1 daripada uwsgi.ini

[uwsgi]
# 进程个数
workers=1

Gunakan kunci socket.bind

Cron menggunakan uWSGI terhad kepada satu proses Jika berbilang proses akan menyebabkan pemasa dimulakan berulang kali, anda boleh menggunakan kunci socket.bind untuk mengubah tugasan yang dijadualkan.

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

Ada masalah mungkin untuk mendapatkan sock.bind(("127.0.0.1", 47200)) pada masa yang sama, yang boleh mengurangkan masalah penduaan tetapi tidak dapat diselesaikan sepenuhnya.

Gunakan mule uWSGI

Langkah 1: Buat Pakej baharu dan tulis __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

Langkah 2: Sediakan uwsgi.ini dan tambah mule = nama pakej/ init.py

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

Atas ialah kandungan terperinci Bagaimana untuk melaksanakan tugas berjadual Django+Nginx+uWSGI. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam