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
rrreee
Dalam contoh di atas, fungsi upload_file view menyimpan fail yang dimuat naik ke cakera dan memprosesnya dengan memanggilprocess_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,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!