Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Optimumkan proses pemprosesan tugas tak segerak menggunakan Celery Redis Django

Optimumkan proses pemprosesan tugas tak segerak menggunakan Celery Redis Django

WBOY
WBOYasal
2023-09-26 11:21:15634semak imbas

使用Celery Redis Django优化异步任务处理流程

Gunakan Celery Redis Django untuk mengoptimumkan proses pemprosesan tugas tak segerak

Semasa proses pembangunan, anda sering menghadapi beberapa tugas yang memakan masa yang perlu diproses, seperti permintaan rangkaian, muat naik fail, pemprosesan data, dsb. Jika anda menunggu tugasan ini selesai semasa pemprosesan permintaan, pengalaman pengguna akan menurun atau permintaan akan disekat. Untuk menyelesaikan masalah ini, pemprosesan tugas tak segerak boleh digunakan untuk meningkatkan prestasi dan kelajuan tindak balas sistem.

Celery ialah rangka kerja pemprosesan tugas tak segerak Python yang biasa digunakan Ia menggunakan perisian tengah mesej untuk merealisasikan pengagihan dan penerimaan tugas. Redis ialah perisian tengah pemesejan popular yang boleh berfungsi sebagai proksi pemesejan Celery. Django ialah rangka kerja web Python yang biasa digunakan yang boleh disepadukan dengan lancar dengan Celery dan Redis untuk memberikan pengalaman pembangunan yang lebih baik.

Artikel ini akan memperkenalkan cara menggunakan Celery, Redis dan Django untuk mengoptimumkan proses pemprosesan tugas tak segerak dan memberikan contoh kod khusus.

Pertama, anda perlu memasang Celery dan Redis dan menambahkannya pada projek Django anda. Anda boleh menggunakan arahan pip untuk memasang perpustakaan yang diperlukan:

pip install Celery Redis

Selepas pemasangan, tambahkan konfigurasi berikut dalam fail settings.py projek Django:

# settings.py

CELERY_BROKER_URL = 'redis://localhost:6379/0'
CELERY_RESULT_BACKEND = 'redis://localhost:6379/0'

Antaranya, CELERY_BROKER_URL menentukan alamat sambungan dan port Redis, dan CELERY_RESULT_BACKEND menentukan alamat Redis storan hasil tugasan.

Seterusnya, buat fail tasks.py yang mentakrifkan tugasan yang perlu diproses secara tak segerak:

# tasks.py

from celery import shared_task

@shared_task
def process_file(file_path):
    # 处理文件的耗时操作
    # ...

@shared_task
def request_api(url):
    # 发送网络请求的耗时操作
    # ...

Dalam Django, gunakan penghias @shared_task untuk mengisytiharkan fungsi sebagai tugas bersama. Tugasan ini akan ditemui dan diproses secara automatik oleh Celery. @shared_task装饰器将函数声明为共享任务。这些任务将会被Celery自动发现并处理。

在views.py中,可以调用这些任务来进行异步处理:

# views.py

from .tasks import process_file, request_api

def upload_file(request):
    if request.method == 'POST':
        file = request.FILES['file']
        # 将上传的文件保存到磁盘
        with open(file_path, 'wb+') as destination:
            for chunk in file.chunks():
                destination.write(chunk)
        # 异步处理文件
        process_file.delay(file_path)
    return render(request, 'upload.html')

def send_request(request):
    if request.method == 'POST':
        url = request.POST['url']
        # 异步发送网络请求
        request_api.delay(url)
    return render(request, 'request.html')

在上述示例中,upload_file视图函数保存上传的文件到磁盘,并通过调用process_file.delay()方法将任务提交给Celery进行异步处理。同样,send_request视图函数通过调用request_api.delay()方法将任务提交给Celery。这样,这些耗时的任务将在后台异步处理,从而提高了系统的响应速度。

最后,需要启动Celery的工作节点,让其监听并处理任务:

celery -A your_project_name worker --loglevel=info

其中,your_project_name

Dalam views.py, tugasan ini boleh dipanggil untuk pemprosesan tak segerak:

rrreee

Dalam contoh di atas, fungsi upload_file view menyimpan fail yang dimuat naik ke cakera dan memprosesnya dengan memanggil process_file.delay() Kaedah menyerahkan tugas kepada Celery untuk pemprosesan tak segerak. Begitu juga, fungsi paparan send_request menyerahkan tugas kepada Celery dengan memanggil kaedah request_api.delay(). Dengan cara ini, tugasan yang memakan masa ini akan diproses secara tak segerak di latar belakang, sekali gus meningkatkan daya tindak balas sistem.

Akhir sekali, anda perlu memulakan nod pekerja Saderi dan biarkan ia mendengar dan memproses tugas:

rrreee

Di mana, nama_projek anda merujuk kepada nama projek Django.

Melalui langkah di atas, anda boleh menggunakan Celery Redis Django untuk mengoptimumkan proses pemprosesan tugas tak segerak. Menggunakan kaedah ini, tugas yang memakan masa boleh dimasukkan ke dalam baris gilir mesej dan Celery bertanggungjawab untuk memproses, dengan itu meningkatkan prestasi serentak dan kelajuan tindak balas sistem.
  1. Ringkasan:
  2. Mengoptimumkan proses pemprosesan tugas tak segerak ialah cara penting untuk meningkatkan prestasi sistem dan kelajuan tindak balas. Artikel ini memperkenalkan cara menggunakan kombinasi Celery Redis Django untuk melaksanakan pemprosesan tugas tak segerak. Dengan menyerahkan tugas yang memakan masa kepada Celery untuk pemprosesan tak segerak, sekatan permintaan boleh dielakkan dan prestasi serentak sistem dan kelajuan tindak balas boleh dipertingkatkan.
Rujukan: 🎜🎜🎜Dokumentasi saderi: https://docs.celeryproject.org/en/stable/🎜🎜Dokumentasi Redis: https://redis.io/documentation🎜🎜

Atas ialah kandungan terperinci Optimumkan proses pemprosesan tugas tak segerak menggunakan Celery Redis Django. 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