Praktischer Kampf: Verwendung von Celery, Redis und Django zur Implementierung gleichzeitiger asynchroner Aufgaben

王林
Freigeben: 2023-09-26 19:37:10
Original
2084 Leute haben es durchsucht

Praktischer Kampf: Verwendung von Celery, Redis und Django zur Implementierung gleichzeitiger asynchroner Aufgaben

Praktisch: Verwendung von Celery, Redis und Django zur Implementierung gleichzeitiger asynchroner Aufgaben

Einführung:
In der modernen Webanwendungsentwicklung für einige Langzeitaufgaben (z. B. Datenverarbeitung, E-Mail-Versand usw.), um Benutzer verbessern Um das Erlebnis und die Systemleistung zu verbessern, werden häufig asynchrone Aufgaben zur Bewältigung dieser Aufgaben verwendet. In diesem Artikel stellen wir vor, wie man mit Celery, Redis und Django eine Lösung für gleichzeitige asynchrone Aufgaben erstellt, und geben spezifische Codebeispiele.

1. Einführung in Celery, Redis und Django:

  1. Celery:
    Celery ist eine asynchrone Task-Warteschlange/Nachrichten-Middleware, die in Python-Anwendungen weit verbreitet ist. Es bietet eine einfache Möglichkeit, zeitaufwändige Aufgaben von der Hauptanwendung zu trennen, um die Systemleistung zu verbessern.
  2. Redis:
    Redis ist ein leistungsstarkes In-Memory-Datenstrukturspeichersystem, das als Nachrichtenbroker für Celery verwendet werden kann. Celery verwendet Redis zum Speichern von Aufgabennachrichten, um eine asynchrone Ausführung von Aufgaben zu erreichen.
  3. Django:
    Django ist ein Python-basiertes Framework für die Entwicklung von Webanwendungen, das eine Fülle von Funktionen und Plug-Ins bietet. Wir können die Strukturen und Muster von Django nutzen, um asynchrone Aufgaben zu organisieren und zu verwalten und sie in Celery und Redis zu integrieren.

2. Richten Sie die Umgebung ein:
Bevor Sie beginnen, stellen Sie sicher, dass Python, Django, Celery und Redis installiert sind. Sie können zum Installieren den Befehl pip verwenden. Das Beispiel lautet wie folgt:

pip install django
pip install celery
pip install redis
Nach dem Login kopieren

3. Konfigurieren Sie Celery und Redis:
Fügen Sie die folgende Konfiguration zur Konfigurationsdatei „settings.py“ des Django-Projekts hinzu:

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

# Redis配置
CACHES = {
    'default': {
        'BACKEND': 'redis_cache.RedisCache',
        'LOCATION': '127.0.0.1:6379',
        'OPTIONS': {
            'DB': 0,
            'PASSWORD': '',
            'PARSER_CLASS': 'redis.connection.HiredisParser'
        },
    }
}
Nach dem Login kopieren

4. Erstellen Sie eine asynchrone Aufgabe:
irgendwo in Django Erstellen Sie die Datei „tasks.py“ im Anwendungsverzeichnis und schreiben Sie den folgenden Code:

from celery import shared_task

@shared_task
def send_email(email):
    """
    发送邮件的异步任务
    """
    # 发送邮件的代码
    ...
Nach dem Login kopieren

5. Rufen Sie asynchrone Aufgaben auf:
Rufen Sie in der Ansichtsfunktion von Django asynchrone Aufgaben über die Methode „delay()“ auf. Das Beispiel ist wie folgt:

from .tasks import send_email

def send_email_view(request):
    # 获取需要发送邮件的用户邮箱
    email = request.GET.get('email')
    
    # 调用异步任务
    send_email.delay(email)
    
    # 返回响应
    return JsonResponse({'status': 'success'})
Nach dem Login kopieren

6. Starten Sie Celery Worker und Beat:
Schreiben Sie in die Datei celery.py im Stammverzeichnis des Projekts den folgenden Code:

from __future__ import absolute_import
import os
from celery import Celery

# 设置Django环境变量
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'project.settings')

app = Celery('project')
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks()
Nach dem Login kopieren

Führen Sie dann den folgenden Befehl im Stammverzeichnis des Projekts aus, um Celery Worker zu starten und Beat:

celery -A project worker --loglevel=info
celery -A project beat --loglevel=info
Nach dem Login kopieren

7. Testen Sie asynchrone Aufgaben:
Schreiben Sie eine Django-Testansichtsfunktion und testen Sie sie, indem Sie asynchrone Aufgaben aufrufen. Das Beispiel lautet wie folgt:

from .tasks import send_email

def test_view(request):
    # 调用异步任务
    send_email.delay('test@example.com')
    
    # 返回响应
    return JsonResponse({'status': 'success'})
Nach dem Login kopieren

8. Dieser Artikel stellt die Verwendung von Celery und Redis vor und Django zur Implementierung gleichzeitiger asynchroner Aufgaben. Durch die Konfiguration von Celery und Redis können Langzeitaufgaben asynchron ausgeführt werden, um die Systemleistung und das Benutzererlebnis zu verbessern. Gleichzeitig werden spezifische Codebeispiele als Referenz und Übung für die Leser bereitgestellt. Ich glaube, dass Leser durch das Erlernen und Üben dieser Lösung gleichzeitige asynchrone Aufgaben sinnvoll in ihren eigenen Projekten anwenden können.

Das obige ist der detaillierte Inhalt vonPraktischer Kampf: Verwendung von Celery, Redis und Django zur Implementierung gleichzeitiger asynchroner Aufgaben. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!