Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Pengaturcaraan pelayan Python: baris gilir tugas menggunakan django-celery

Pengaturcaraan pelayan Python: baris gilir tugas menggunakan django-celery

王林
王林asal
2023-06-18 17:09:111447semak imbas

Pengaturcaraan Pelayan Python: Beratur Tugas dengan django-celery

Dengan peningkatan populariti aplikasi web dan peningkatan bilangan pengguna, aplikasi web moden perlu kekal produktif dengan mengendalikan tugas yang kompleks dan sensitif masa dan kestabilan. Daripada pemprosesan pesanan di tapak web e-dagang dan pemprosesan fail log sistem kepada aplikasi canggih penglihatan komputer dan pemprosesan bahasa semula jadi, tugas ini memerlukan proses bebas untuk dikendalikan.

Pendekatan konvensional ialah menggunakan cron atau penjadual kerja yang serupa, tetapi terdapat masalah berikut:

  • Sukar untuk mengurus dan mengagihkan tugas secara dinamik.
  • Kesukaran mencuba semula tugas yang gagal.
  • Tidak boleh mengagihkan tugas dengan mudah kepada berbilang pelayan.
  • Tiada cara untuk menjejak dan memantau status pekerjaan dan tugas.

Jadi, untuk menyelesaikan masalah ini, kami memerlukan perkhidmatan giliran tugas.

Dalam ekosistem Python, Celery ialah baris gilir tugas yang paling biasa digunakan. Ia ialah baris gilir tugas yang direka bentuk untuk sistem teragih dan sesuai untuk aplikasi web yang berkonkurensi tinggi dan berkemampuan tinggi.

Dalam artikel ini, kami akan memperkenalkan cara membangunkan perkhidmatan baris gilir tugas menggunakan Celery dan Django. Kami akan menggunakan Django-Celery sebagai integrasi Django untuk Celery.

  1. Pasang kebergantungan berkaitan

Pertama, kita perlu memasang kebergantungan Celery dan Django-Celery ke dalam projek. Anda boleh menggunakan alat pip untuk memasangnya.

pip pasang saderi django-celery

  1. Konfigurasi Saderi

Sebelum kita mula menggunakan Saderi, kita perlu mengkonfigurasi Saderi. Untuk melakukan ini, buat fail yang dipanggil celery.py, yang sepatutnya terletak dalam direktori akar projek anda. Kandungan fail adalah seperti berikut:

from __future__ import absolute_import, unicode_literals

import os

from celery import Celery

# Set the default Django settings module for the 'celery' program.
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'example.settings')

app = Celery('example')

# Using a string here means the worker will not have to
# pickle the object when using Windows.
app.config_from_object('django.conf:settings', namespace='CELERY')

# Load task modules from all registered Django app configs.
app.autodiscover_tasks()

Nota: Jika anda ingin mengkonfigurasi Celery menggunakan konfigurasi yang dinyatakan dalam fail settings.py, gantikan 'example.settings' dengan nama projek Django anda yang sebenar.

  1. Mengkonfigurasi Django

Sekarang, kita perlu mengkonfigurasi Django dalam fail settings.py supaya ia menyokong Celery.

# Celery Configuration
CELERY_BROKER_URL = 'redis://localhost:6379/0'
CELERY_RESULT_BACKEND = 'redis://localhost:6379/0'

CELERY_ACCEPT_CONTENT = ['application/json']
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'

# app注册
INSTALLED_APPS = (
    ...
    'django_celery_results',
    'django_celery_beat',
    ...
)

Di sini kami mengkonfigurasi dua tetapan utama. (1) CELERY_BROKER_URL – Ini memberitahu Celery untuk menggunakan Redis sebagai perkhidmatan middlewarenya. (2) INSTALLED_APPS – Kami perlu mendaftarkan dua permohonan Django-Celery dalam permohonan kami.

  1. Buat tugasan

Sekarang kita telah mengkonfigurasi Saderi dan Django, kita boleh mula menentukan beberapa tugasan. Kami akan membuat contoh tugasan untuk menunjukkan struktur tugas dan sintaks. Dalam fail app/tasks.py, tambahkan kandungan berikut.

from django.core.mail import send_mail
from celery import shared_task
from datetime import datetime


@shared_task
def send_email_task():
    subject = 'Celery Email Demo'
    message = 'This email is sent using celery!'
    from_email = 'demo@example.com'
    recipient_list = ['recipient@example.com']
    send_mail(subject, message, from_email, recipient_list)

    print('Email Sent Successfully')
    return None


@shared_task
def print_time():
    now = datetime.now()
    current_time = now.strftime("%H:%M:%S")
    print("Current Time =", current_time)

    return None

Di sini, kami mentakrifkan dua tugas. Ia adalah tugasan_serah_email dan tugasan_masa cetak. Beri perhatian kepada perkara ini, kami menghiasi tugasan dengan penghias tugas_kongsi. Ini menjadikan tugasan kami boleh diakses dari mana-mana sahaja, membolehkan mereka dipanggil oleh pelbagai proses.

  1. Mulakan proses pekerja

Sekarang kita telah mentakrifkan tugas, kita perlu memulakan proses pekerja dan memberitahu mereka tugas yang perlu dilakukan.

Buka tetingkap terminal dan masukkan arahan berikut:

$ celery -A example worker --loglevel=info

Perhatikan bahawa contoh mewakili nama projek Django. Di sini, kami menggunakan --loglevel=info untuk mengawal tahap log pekerja.

  1. Menjadualkan tugas melalui antara muka pentadbir Django

Django-Celery menyokong pengurusan dan penjadualan tugas dalam antara muka Pentadbir Django. Kami perlu mendaftar dua permohonan dengan Django-Celery. Kami boleh menambah kod berikut dalam fail admin.py.

from django.contrib import admin
from django_celery_beat.admin import PeriodicTaskAdmin, IntervalScheduleAdmin
from django_celery_results.models import TaskResult
from django_celery_results.admin import TaskResultAdmin
from core.tasks import send_email_task, print_time


class Tasks(admin.ModelAdmin):
    actions = ['send_email_task', 'print_time']

    def send_email_task(self, request, queryset):
        send_email_task.delay()

    send_email_task.short_description = "Send Email Task"

    def print_time(self, request, queryset):
        print_time.delay()

    print_time.short_description = "Print Current Time"


admin.site.unregister(TaskResult)
admin.site.register(TaskResult, TaskResultAdmin)
admin.site.register(IntervalSchedule, IntervalScheduleAdmin)
admin.site.register(PeriodicTask, PeriodicTaskAdmin)
admin.site.register(Tasks)

Di sini kami menambahkan tugasan kami pada antara muka pentadbir. Kami boleh melaksanakan tugasan ini dengan mengklik butang "Lakukan Tugasan Mel" dan "Cetak Masa Semasa".

Kini, kami telah berjaya menyediakan perkhidmatan baris gilir tugas menggunakan Django-Celery. Kami boleh menggunakannya untuk aplikasi yang berbeza dan mengedarkannya kepada berbilang pelayan menggunakan protokol komunikasi seperti protokol WebSocket dan HTTP.

Kesimpulan

Artikel ini memperkenalkan cara menggunakan Celery dan Django untuk membangunkan perkhidmatan baris gilir tugas. Kami menggunakan Django-Celery sebagai integrasi Django untuk Celery dan menunjukkan cara mentakrifkan tugas, mengkonfigurasi Celery, memulakan pekerja, menjadualkan tugas dan mengurus tugas. Perkhidmatan baris gilir tugas menyediakan cara terbaik untuk mengendalikan tugas yang rumit dan memakan masa serta membolehkan prestasi dan kebolehpercayaan aplikasi web yang lebih baik.

Atas ialah kandungan terperinci Pengaturcaraan pelayan Python: baris gilir tugas menggunakan django-celery. 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