Celery, Redis dan Django digunakan bersama untuk meningkatkan kecekapan pemprosesan tugas tak segerak
Pengenalan: Dalam proses membangunkan aplikasi web, kami sering menghadapi beberapa tugas yang memakan masa yang perlu diproses. Jika tugasan ini dilaksanakan secara langsung dalam proses pemprosesan permintaan, ia akan menyebabkan pengguna menunggu terlalu lama, yang amat tidak mesra kepada pengalaman pengguna. Untuk menyelesaikan masalah ini, kami boleh menggunakan Celery, Redis dan Django untuk memproses tugas yang memakan masa secara tidak segerak, meningkatkan prestasi sistem dan pengalaman pengguna.
Pengenalan dan pemasangan Saderi
Saderi ialah baris gilir tugas yang berfungsi berdasarkan pemesejan yang diedarkan dan juga menyokong penjadualan tugas. Memasang Celery boleh diselesaikan melalui arahan pip:
pip install celery
Konfigurasi Django
Pertama, anda perlu tetapkan tetapan projek Django Tambah item konfigurasi Celery pada fail .py, seperti yang ditunjukkan di bawah:
# settings.py # Celery配置 CELERY_BROKER_URL = 'redis://localhost:6379/0' CELERY_RESULT_BACKEND = 'redis://localhost:6379/0' CELERY_ACCEPT_CONTENT = ['json'] CELERY_TASK_SERIALIZER = 'json' CELERY_RESULT_SERIALIZER = 'json'
Dalam konfigurasi di atas, CELERY_BROKER_URL
dan CELERY_RESULT_BACKEND
tentukan alamat dan pelabuhan Redis, yang digunakan sebagai Backend tugas untuk baris gilir dan penyimpanan hasil. CELERY_BROKER_URL
和CELERY_RESULT_BACKEND
指定了Redis的地址和端口,用来作为任务队列和结果存储的后端。
接下来,在项目的urls.py文件中添加Celery的配置,如下所示:
# urls.py from django.urls import path from .views import AsyncTaskView urlpatterns = [ path('async-task/', AsyncTaskView.as_view(), name='async_task'), ]
创建任务函数
在Django的app中创建tasks.py文件,并在其中定义异步任务的函数。下面是一个示例代码:
# app/tasks.py from celery import shared_task import time @shared_task def process_task(): # 模拟任务处理过程(等待5秒) time.sleep(5) return 'Task completed'
在上述代码中,@shared_task
装饰器用于将函数转换为Celery的任务函数。
视图实现
在Django的views.py文件中定义一个视图类,用于接收请求并调用异步任务函数。下面是一个示例代码:
# app/views.py from django.views import View from .tasks import process_task from django.http import HttpResponse class AsyncTaskView(View): def get(self, request): # 调用异步任务 task = process_task.delay() return HttpResponse('Task started')
启动Celery服务
使用以下命令来启动Celery的工作进程:
celery -A your_project_name worker --loglevel=info
注意将your_project_name
替换为你的Django项目名称。
http://localhost:8000/async-task/
Seterusnya, tambahkan konfigurasi Celery dalam fail urls.py projek seperti berikut:
rrreee@shared_task
digunakan untuk menukar fungsi kepada fungsi tugas Saderi. 🎜🎜🎜🎜Lihat pelaksanaan🎜Tentukan kelas paparan dalam fail views.py Django untuk menerima permintaan dan memanggil fungsi tugas tak segerak. Berikut ialah contoh kod: 🎜rrreee🎜🎜🎜Mulakan perkhidmatan Saderi 🎜Gunakan arahan berikut untuk memulakan proses pekerja Saderi: 🎜rrreee🎜Ganti http://localhost:8000/async-task/
dalam penyemak imbas Jika semuanya berjalan lancar, anda akan melihat hasil pulangan ialah 'Tugas dimulakan'. Pada masa ini, tugasan telah diproses secara tak segerak di latar belakang dan tidak akan menyekat pemprosesan permintaan pengguna. 🎜🎜🎜Kesimpulan: Dengan menggunakan gabungan Saderi, Redis dan Django, kami boleh memproses tugas yang memakan masa secara tidak segerak, meningkatkan prestasi sistem dan pengalaman pengguna. Barisan tugasan dan penjadualan tugas boleh diuruskan dengan mudah menggunakan Celery, manakala Redis sebagai storan bahagian belakang membolehkan penyimpanan data tugasan yang boleh dipercayai. Penyelesaian ini boleh digunakan secara meluas dalam pembangunan aplikasi Web, dan proses pelaksanaannya ditunjukkan melalui contoh kod tertentu. 🎜Atas ialah kandungan terperinci Saderi, Redis dan Django digunakan bersama untuk meningkatkan kecekapan pemprosesan tugas tak segerak. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!