Bei einigen Vorgängen in Webanwendungen kann es lange dauern, bis sie abgeschlossen sind, oder ihre Ausführungszeit kann nicht bestimmt werden. Wenn der Benutzer bei diesen Vorgängen nur wissen muss, dass der Server die Anforderung empfangen hat und nicht sofort das Ausführungsergebnis der Anforderung erhalten muss, können wir sie asynchron verarbeiten. Wenn die Verwendung des Caches die erste wichtige Sache zur Optimierung der Website-Leistung ist, dann ist die Asynchronisierung von Aufgaben, die Zeit in Anspruch nehmen oder deren Ausführungszeit ungewiss ist, die zweite wichtige Sache zur Optimierung der Website-Leistung. Einfach ausgedrückt: Alles, was verschoben werden kann, sollte nicht sofort erledigt werden.
Im vorherigen Kapitel haben wir als Beispiele das Versenden von Textnachrichten und das Hochladen von Dateien in den Cloud-Speicher genommen. Von diesen beiden Vorgängen ist ersterer ein Vorgang mit ungewisser Zeit (da wir als Aufrufer die Antwortzeit der Drittanbieterplattform nicht bestimmen können) und letzterer ein zeitaufwändiger Vorgang (wenn die Datei groß ist oder die Wenn die Plattform eines Drittanbieters instabil ist, kann dies dazu führen, dass das Hochladen lange dauert. Offensichtlich können beide Operationen asynchron sein.
In Python-Projekten können wir Multithreading verwenden oder die Drittanbieter-Bibliothek Celery verwenden, um eine asynchrone Verarbeitung zu erreichen.
Celery ist eine asynchrone Aufgabenwarteschlange/Nachrichtenwarteschlange in Python, mit der die Verarbeitung asynchroner Aufgaben problemlos abgeschlossen werden kann. Mithilfe von Celery können Aufgaben an mehrere Aufgabenausführer verteilt werden, bei denen es sich um einen einzelnen Prozess, mehrere Prozesse oder mehrere Hosts handeln kann. Celery unterstützt außerdem Aufgabenpriorität, Aufgabenergebnisspeicherung, Aufgabenwiederholung und andere Funktionen.
Die Verwendung von Celery zur Implementierung der Asynchronisierung erfordert die folgenden Schritte:
Celery installieren
pip install celery
Eine Celery-Anwendung im Projekt erstellen
from celery import Celery app = Celery('tasks', broker='pyamqp://guest@localhost//')
Aufgaben definieren
@app.task def add(x, y): return x + y
Aufgaben im Projekt aufrufen
result = add.delay(4, 4) print(result.get(timeout=1))
Das threading
-Modul in Python kann zum Erstellen von Multithreads verwendet werden. Mithilfe von Multithreading können zeitaufwändige Aufgaben in neuen Threads ausgeführt werden, ohne die Ausführung des Hauptthreads zu beeinträchtigen. threading
模块可以用来创建多线程。使用多线程可以将耗时的任务放在新线程中执行,从而不会影响主线程的执行。
使用多线程实现异步化需要以下步骤:
导入 threading
模块
import threading
定义一个函数作为任务
def task(): print('Hello from task')
创建一个新线程并启动它
t = threading.Thread(target=task) t.start()
有些任务需要在特定的时间执行,这时候我们需要使用定时任务。Python 中有多个第三方库可以用来实现定时任务,如 schedule
、APScheduler
等。下面以 APScheduler
为例来讲解如何实现定时任务。
使用 APScheduler
实现定时任务需要以下步骤:
安装 APScheduler
pip install apscheduler
导入 APScheduler
模块
from apscheduler.schedulers.blocking import BlockingScheduler
创建一个 BlockingScheduler
实例并添加任务
def task(): print('Hello from task') scheduler = BlockingScheduler() scheduler.add_job(task, 'interval', seconds=5) scheduler.start()
上述代码会每隔 5 秒执行一次 task
函数。
虽然 Celery 和多线程都可以实现异步化处理,但是它们之间存在一些差异和优缺点。
优点:
可以将任务分发到多个任务执行者中,从而实现任务的负载均衡,提高任务处理的效率。
支持任务的优先级、任务结果的保存、任务的重试等功能。
支持多种消息传输协议,如 AMQP、Redis、RabbitMQ 等。
可以方便地集成到 Django、Flask 等 Web 框架中。
缺点:
安装和配置过程可能会比较繁琐。
可能会增加系统的复杂性。
优点:
实现起来比较简单,不需要安装额外的库。
可以在本地机器上快速地完成任务处理。
缺点:
不能将任务分发到多个任务执行者中,从而无法实现任务的负载均衡。
无法方便地实现任务的优先级、任务结果的保存、任务的重试等功能。
可能会导致系统的性能下降,因为多线程的并发性能有限。
在 Python 中,有多个第三方库可以用来实现定时任务,如 schedule
、APScheduler
等。这些库都有各自的优缺点,我们可以根据具体需求选择合适的库来实现定时任务。
简单易用,只需要调用 schedule
threading
rrreee
Geplante Aufgabenschedule
, APScheduler
usw. Im Folgenden wird APScheduler
als Beispiel verwendet, um zu erklären, wie geplante Aufgaben implementiert werden. Die Verwendung von APScheduler
zum Implementieren geplanter Aufgaben erfordert die folgenden Schritte: 🎜🎜Installieren Sie APScheduler
🎜🎜🎜pip install apscheduler🎜🎜🎜Importieren Sie den APScheduler
Modul🎜rrreee 🎜Erstellen Sie eine BlockingScheduler
-Instanz und fügen Sie Aufgaben hinzu🎜rrreee🎜Der obige Code führt die Funktion task
alle 5 Sekunden aus. 🎜🎜Vergleich zwischen Celery und Multi-Threading🎜🎜Obwohl sowohl Celery als auch Multi-Threading eine asynchrone Verarbeitung implementieren können, gibt es einige Unterschiede, Vor- und Nachteile zwischen ihnen. 🎜🎜Vor- und Nachteile von Celery🎜🎜Vorteile: 🎜🎜🎜🎜Kann Aufgaben an mehrere Aufgabenausführer verteilen, wodurch ein Aufgabenlastausgleich erreicht und die Effizienz der Aufgabenverarbeitung verbessert wird. 🎜🎜🎜🎜Unterstützt Aufgabenpriorität, Aufgabenergebnisspeicherung, Aufgabenwiederholung und andere Funktionen. 🎜🎜🎜🎜Unterstützt mehrere Nachrichtenübertragungsprotokolle wie AMQP, Redis, RabbitMQ usw. 🎜🎜🎜🎜Kann problemlos in Web-Frameworks wie Django und Flask integriert werden. 🎜🎜🎜🎜Nachteile: 🎜🎜🎜🎜Der Installations- und Konfigurationsprozess kann umständlich sein. 🎜🎜🎜🎜 Kann die Systemkomplexität erhöhen. 🎜🎜🎜🎜Vor- und Nachteile von Multithreading🎜🎜Vorteile: 🎜🎜🎜🎜Es ist relativ einfach zu implementieren und erfordert keine Installation zusätzlicher Bibliotheken. 🎜🎜🎜🎜Kann die Aufgabenverarbeitung schnell auf dem lokalen Computer abschließen. 🎜🎜🎜🎜Nachteile: 🎜🎜🎜🎜Aufgaben können nicht auf mehrere Aufgabenausführer verteilt werden, sodass ein Lastausgleich der Aufgaben nicht möglich ist. 🎜🎜🎜🎜Es ist nicht möglich, Aufgaben wie Priorität, Speichern von Aufgabenergebnissen und Wiederholen von Aufgaben bequem umzusetzen. 🎜🎜🎜🎜 kann zu einer Verschlechterung der Systemleistung führen, da Multithreading eine begrenzte Parallelitätsleistung aufweist. 🎜🎜🎜🎜Auswahl geplanter Aufgaben🎜🎜In Python gibt es mehrere Bibliotheken von Drittanbietern, die zum Implementieren geplanter Aufgaben verwendet werden können, z. B. schedule
, APScheduler
usw . Diese Bibliotheken haben ihre eigenen Vor- und Nachteile, und wir können die geeignete Bibliothek auswählen, um geplante Aufgaben entsprechend den spezifischen Anforderungen umzusetzen. 🎜🎜Schedule-Bibliothek🎜🎜🎜🎜 ist einfach und benutzerfreundlich. Sie müssen nur die Funktion schedule
aufrufen, um geplante Aufgaben umzusetzen. 🎜🎜🎜🎜 kann keinen Lastausgleich von Aufgaben und keine gleichzeitige Ausführung von Aufgaben erreichen. 🎜🎜🎜🎜APScheduler-Bibliothek🎜🎜🎜🎜 unterstützt mehrere Scheduler, wie BlockingScheduler, BackgroundScheduler, AsyncIOScheduler usw. 🎜🎜🎜🎜Unterstützt mehrere Auslöser wie Datum, Intervall, Cron, Intervall_ab_letztem usw. 🎜Unterstützt die gleichzeitige Ausführung von Aufgaben und den Lastausgleich.
Kann problemlos in Web-Frameworks wie Django und Flask integriert werden.
Das obige ist der detaillierte Inhalt vonWie kann man die asynchronen und geplanten Aufgaben von Python nutzen, um die Parallelität von Programmen und die Effizienz der Ausführung zu verbessern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!