Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Gunakan Celery Redis Django untuk mengoptimumkan proses pemprosesan tugas tak segerak tapak web

Gunakan Celery Redis Django untuk mengoptimumkan proses pemprosesan tugas tak segerak tapak web

WBOY
WBOYasal
2023-09-27 08:38:01816semak imbas

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

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

$ pip pasang redis


3 konfigurasi berikut kepada fail settings.py:

Redis as message broker


BROKER_URL = 'redis://localhost:6379/0'

#🎜🎜 # Simpan hasil tugasan secara setempat

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

Define task module

#🎜🎜🎜##🎜🎜🎜 #CELERY (#_IMPORT#SELERY 🎜#
'your_app.tasks',

)

Tetapkan nama baris gilir tugas lalai

CELERY_DEFAULT_QUEUE = 'default'

#🎜 🎜🎜##🎜

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.py

dari tugas import saderi

dari 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)

Perlu diingatkan bahawa penghias tugas di sini disediakan oleh Celery dan digunakan untuk mendaftarkan fungsi sebagai tugas Celery.

5. Mulakan Pekerja Saderi

Buka terminal, beralih ke direktori akar projek Django, dan laksanakan arahan berikut untuk memulakan Pekerja Saderi.

$ saderi -Pekerja nama_projek -l info


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')

7 Menjalankan ujian dan ringkasan

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.

Anda boleh melihat bahawa e-mel akan dihantar secara tidak segerak di latar belakang, dan antara muka akan bertindak balas serta-merta dengan mesej segera, jadi pengguna tidak perlu menunggu e-mel dihantar. Ini ialah proses pemprosesan tugas tak segerak yang dilaksanakan menggunakan Celery Redis Django.

Ringkasan:

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

BROKER_URL/: 'redis: //local 0'

Simpan hasil tugasan secara setempat


CELERY_RESULT_BACKEND = 'redis://localhost:6379/0'
#🎜🎜 #Tentukan modul tugas🎜

CELERY_IMPORTS = (

'your_app.tasks',

)

Tetapkan nama baris gilir tugas lalai

CELERY_QUEUE_DEFAULT=🎜 🎜#tasks.py

dari tugas import saderi

dari django.core.mail import send_mail

@task()#🎜🎜_defk send_email mesej, from_email, recipient_list):

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!

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