Rumah >pembangunan bahagian belakang >Tutorial Python >Bina sistem pemprosesan tugas tak segerak yang cekap: menggunakan Celery Redis Django
Membina sistem pemprosesan tugas tak segerak yang cekap: menggunakan Celery Redis Django
Pengenalan:
Dalam aplikasi web moden, memproses tugas tak segerak adalah tugas yang sangat penting. Pemprosesan tugas tak segerak membolehkan kami mengasingkan tugas yang memakan masa daripada permintaan daripada aplikasi utama, meningkatkan pengalaman pengguna dan prestasi keseluruhan. Dalam artikel ini, kami akan memperkenalkan cara menggunakan rangka kerja Celery, Redis dan Django untuk membina sistem pemprosesan tugas tak segerak yang cekap.
1. Pengenalan kepada Saderi:
Saderi ialah rangka kerja baris gilir tugas yang diedarkan Python yang membolehkan kami mengagihkan tugas kepada pemproses atau pekerja dan berkomunikasi melalui baris gilir mesej. Saderi menyokong berbilang hujung belakang, seperti Redis, RabbitMQ, dsb., tetapi dalam artikel ini kami akan menggunakan Redis sebagai hujung belakang storan untuk baris gilir mesej.
2. Pengenalan kepada Redis:
Redis ialah sistem penyimpanan struktur data dalam memori sumber terbuka, yang boleh digunakan sebagai pangkalan data, cache dan perisian tengah mesej. Redis mempunyai ciri prestasi tinggi, kebolehskalaan dan ketahanan, dan sesuai untuk membina sistem pemprosesan tugas tak segerak yang cekap.
3. Konfigurasi Saderi dalam Django:
Pasang Saderi dan Redis:
Gunakan arahan pip untuk memasang perpustakaan Saderi dan Redis:
Konfigurasi tetapan Django.py:Dalam tetapan Django.py: projek , tambah item konfigurasi berikut:
pip install Celery redis
Dalam direktori akar projek Django, buat fail celery.py dan tambah kandungan berikut:
# Celery settings CELERY_BROKER_URL = 'redis://localhost:6379/0' CELERY_RESULT_BACKEND = 'redis://localhost:6379/0'
Dalam projek Django, Cipta fail tasks.py dan tambah kandungan berikut:
from __future__ import absolute_import, unicode_literals import os from celery import Celery # 设置默认的DJANGO_SETTINGS_MODULE环境变量 os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'your_project.settings') # 创建Celery实例 app = Celery('your_project') # 从Django配置中加载Celery设置 app.config_from_object('django.conf:settings', namespace='CELERY') # 自动从所有已注册的Django app中加载任务模块 app.autodiscover_tasks()
Dalam fungsi paparan Django, cetuskan pelaksanaan tugas dengan memanggil kaedah kelewatan() tugas tak segerak:
from __future__ import absolute_import, unicode_literals from your_project.celery import app # 定义异步任务 @app.task def process_task(data): # 执行异步任务的逻辑处理 result = process_data(data) return result
Masukkan arahan berikut dalam terminal untuk memulakan pekerja Saderi:
from django.shortcuts import render from your_app.tasks import process_task def your_view(request): if request.method == 'POST': data = request.POST.get('data') # 触发异步任务 result = process_task.delay(data) # 返回任务结果给用户 return render(request, 'result.html', {'result': result.id}) else: return render(request, 'your_form.html')5. Pantau tugasan tak segerak:
Melalui alatan yang disediakan oleh Celery, kita boleh memantau dan mengurus pelaksanaan tugas tak segerak. Contohnya, anda boleh menggunakan alat Flower untuk memulakan antara muka web untuk memantau baris gilir tugas tak segerak:
celery -A your_project worker --loglevel=info6. Ringkasan:
Dalam artikel ini, kami memperkenalkan cara menggunakan rangka kerja Celery, Redis dan Django untuk membina tugas tak segerak yang cekap sistem pemprosesan. Dengan menggunakan Celery dan Redis, kami boleh dengan mudah memproses tugas yang memakan masa secara tidak segerak dan meningkatkan prestasi aplikasi dan pengalaman pengguna. Reka bentuk sistem pemprosesan tugas tak segerak ini boleh digunakan untuk pelbagai keperluan, seperti penghantaran e-mel latar belakang, pemprosesan imej, dll. Saya harap artikel ini akan membantu anda membina sistem pemprosesan tugas tak segerak yang cekap.
Atas ialah kandungan terperinci Bina sistem pemprosesan tugas tak segerak yang cekap: menggunakan Celery Redis Django. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!