Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Saderi, Redis dan Django digunakan bersama untuk meningkatkan kecekapan pemprosesan tugas tak segerak

Saderi, Redis dan Django digunakan bersama untuk meningkatkan kecekapan pemprosesan tugas tak segerak

PHPz
PHPzasal
2023-09-28 18:27:24863semak imbas

Saderi, Redis dan Django digunakan bersama untuk meningkatkan kecekapan pemprosesan tugas tak segerak

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.

  1. 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
  2. Pengenalan dan pemasangan Redis
    Redis ialah pangkalan data dalam memori sumber terbuka yang menyokong pelbagai struktur data dan pelbagai senario aplikasi. Dalam senario kami, Redis digunakan terutamanya sebagai pelaksanaan storan bahagian belakang baris gilir tugas. Memasang Redis boleh diselesaikan dengan langkah berikut:
  3. Muat turun Redis dan nyahzipnya
  4. Masukkan direktori yang dinyahmampat dan gunakan arahan make untuk menyusun
  5. Gunakan arahan make install untuk memasang
  6. 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_URLCELERY_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'),
]
  1. 创建任务函数
    在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的任务函数。

  2. 视图实现
    在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')
  3. 启动Celery服务
    使用以下命令来启动Celery的工作进程:

    celery -A your_project_name worker --loglevel=info

    注意将your_project_name替换为你的Django项目名称。

  4. 测试
    在浏览器中访问http://localhost:8000/async-task/

Seterusnya, tambahkan konfigurasi Celery dalam fail urls.py projek seperti berikut:

rrreee
    🎜🎜Buat fungsi tugas🎜Buat fail tasks.py dalam apl Django , dan tentukan fungsi tugas tak segerak di dalamnya. Berikut ialah contoh kod: 🎜rrreee🎜Dalam kod di atas, penghias @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 nama_projek anda dengan nama projek Django anda. 🎜🎜🎜Ujian🎜Lawati 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!

Kenyataan:
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