Bagaimana untuk melaksanakan tugas berjadual Django+Nginx+uWSGI

WBOY
Lepaskan: 2023-05-15 11:34:06
ke hadapan
1491 orang telah melayarinya

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
Salin selepas log masuk

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

[uwsgi]
# 进程个数
workers=1
Salin selepas log masuk

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

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
Salin selepas log masuk

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

[uwsgi]
mule = package包名/__init__.py
Salin selepas log masuk

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!

Label berkaitan:
sumber:yisu.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan