Gunakan Celery Redis Django untuk mengoptimumkan proses pemprosesan tugas tak segerak tapak web
Kata Pengantar:
Apabila kita sering membangunkan tapak web beberapa operasi yang membuang masa, seperti menghantar e-mel, menjana laporan, merangkak data, dsb. Jika operasi ini adalah segerak, ia akan menyebabkan pengguna membeku sementara menunggu operasi selesai, memburukkan lagi pengalaman pengguna. Untuk menyelesaikan masalah ini, anda boleh menggunakan tugas tak segerak untuk mengendalikan operasi yang memakan masa, dan Celery kini merupakan rangka kerja pemprosesan tugas tak segerak Python yang popular.
Celery ialah rangka kerja baris gilir tugas yang diedarkan yang boleh meletakkan tugasan ke dalam baris gilir dan melaksanakannya secara tidak segerak oleh nod pekerja Celery (Pekerja), dengan itu mencapai pelaksanaan tugasan tak segerak. Dalam penggunaan Celery, Redis ialah broker mesej yang biasa digunakan (Broker), digunakan untuk menyampaikan tugasan Celery.
Untuk menunjukkan penggunaan Celery Redis Django dengan lebih baik, artikel ini akan mengambil fungsi menghantar e-mel sebagai contoh. Berikut akan dibahagikan kepada bahagian berikut untuk menerangkan:
1 Persediaan persekitaran
2 Laksanakan tugas tak segerak
5. Mulakan Pekerja Saderi
6. Tulis modul ujian
7. Jalankan ujian dan ringkasan
1. Persediaan persekitaran #🎜 Sebelum🎜 meneruskan, anda perlu memastikan bahawa Python, Django dan Redis telah dipasang. Jika ia tidak dipasang, anda boleh memasangnya melalui pip.
2. Pasang Saderi dan Redis
$ pip pasang saderi
3 konfigurasi berikut kepada fail settings.py:
BROKER_URL = 'redis://localhost:6379/0'
'your_app.tasks',
#🎜 🎜🎜##🎜
Buat fail tasks.py dalam beberapa apl projek Django untuk menyimpan fungsi tugas tak segerak. Contohnya, kami mencipta apl e-mel, dan kemudian menulis tugas tak segerak untuk menghantar e-mel dalam e-mel/tasks.py. email/tasks.pydari tugas import saderidari django.core.mail import send_mail
@task 🎜🎜#def send_email_task(subject, message, from_email, recipient_list):
send_mail(subject, message, from_email, recipient_list)
Buka terminal, beralih ke direktori akar projek Django, dan laksanakan arahan berikut untuk memulakan Pekerja Saderi.
Di mana, nama_projek ialah nama projek Django.
6 Tulis modul ujian
Tulis fungsi paparan yang menghantar e-mel dalam views.py apl dalam projek Django dan ikat fungsi paparan pada URL.
views.py
dari django.shortcuts import render
from .tasks import send_email_task#🎜(_questionmail##🎜(_questionemail##🎜) 🎜#
if request.method == 'POST': subject = request.POST.get('subject') message = request.POST.get('message') from_email = request.POST.get('from_email') recipient_list = [request.POST.get('recipient_email')] # 调用异步任务 send_email_task.delay(subject, message, from_email, recipient_list) return render(request, 'success.html') return render(request, 'send_email.html')
Mulakan projek Django, kemudian akses alamat URL yang sepadan dengan paparan send_email_view melalui penyemak imbas, isikan maklumat yang berkaitan dan klik butang hantar e-mel.
Menggunakan Celery Redis Django boleh melaksanakan pemprosesan tugas tak segerak dengan mudah di tapak web. Dengan meletakkan operasi yang memakan masa ke dalam tugas tak segerak Celery, anda boleh meningkatkan prestasi dan pengalaman pengguna tapak web anda dengan berkesan. Dalam proses penggunaan khusus, kita perlu memasang dan mengkonfigurasi Saderi dan menentukan modul tugas, dan kemudian memanggil fungsi tugas tak segerak dalam Django untuk mencapai pemprosesan tak segerak. Tugasan yang berbeza boleh diproses secara serentak melalui pekerja yang berbeza, meningkatkan keupayaan pemprosesan serentak seluruh sistem.
Contoh kod khusus:
settings.py
Redis sebagai broker mesej
CELERY_RESULT_BACKEND = 'redis://localhost:6379/0'
#🎜🎜 #Tentukan modul tugas🎜
'your_app.tasks',
dari django.core.mail import send_mail
send_mail(subject, message, from_email, recipient_list)
views.py
from django.shortcuts import render
from .tasks import send#_email##🎜 def send_email_view(request):if request.method == 'POST': subject = request.POST.get('subject') message = request.POST.get('message') from_email = request.POST.get('from_email') recipient_list = [request.POST.get('recipient_email')] # 调用异步任务 send_email_task.delay(subject, message, from_email, recipient_list) return render(request, 'success.html') return render(request, 'send_email.html')
Atas ialah kandungan terperinci Gunakan Celery Redis Django untuk mengoptimumkan proses pemprosesan tugas tak segerak tapak web. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!