Heim  >  Artikel  >  Backend-Entwicklung  >  Wie kann man die asynchronen und geplanten Aufgaben von Python nutzen, um die Parallelität von Programmen und die Effizienz der Ausführung zu verbessern?

Wie kann man die asynchronen und geplanten Aufgaben von Python nutzen, um die Parallelität von Programmen und die Effizienz der Ausführung zu verbessern?

WBOY
WBOYnach vorne
2023-05-09 17:25:161010Durchsuche

Asynchrone Aufgaben und geplante Aufgaben

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.

Verwenden Sie Celery, um Asynchronisierung 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))

Verwenden Sie mehrere -threading Asynchronisierung implementieren

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 中有多个第三方库可以用来实现定时任务,如 scheduleAPScheduler 等。下面以 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和多线程的比较

虽然 Celery 和多线程都可以实现异步化处理,但是它们之间存在一些差异和优缺点。

Celery的优缺点

优点:

  • 可以将任务分发到多个任务执行者中,从而实现任务的负载均衡,提高任务处理的效率。

  • 支持任务的优先级、任务结果的保存、任务的重试等功能。

  • 支持多种消息传输协议,如 AMQP、Redis、RabbitMQ 等。

  • 可以方便地集成到 Django、Flask 等 Web 框架中。

缺点:

  • 安装和配置过程可能会比较繁琐。

  • 可能会增加系统的复杂性。

多线程的优缺点

优点:

  • 实现起来比较简单,不需要安装额外的库。

  • 可以在本地机器上快速地完成任务处理。

缺点:

  • 不能将任务分发到多个任务执行者中,从而无法实现任务的负载均衡。

  • 无法方便地实现任务的优先级、任务结果的保存、任务的重试等功能。

  • 可能会导致系统的性能下降,因为多线程的并发性能有限。

定时任务的选择

在 Python 中,有多个第三方库可以用来实现定时任务,如 scheduleAPScheduler 等。这些库都有各自的优缺点,我们可以根据具体需求选择合适的库来实现定时任务。

schedule库

  • 简单易用,只需要调用 schedule

    Die Implementierung der Asynchronisierung mithilfe von Multithreading erfordert die folgenden Schritte:
  • Importieren des Moduls threading

  • Threading importieren

Definieren Sie eine Funktion als Aufgabe
    rrreee
  • Erstellen Sie einen neuen Thread und starten Sie ihn

    rrreee

    Geplante Aufgaben
  • Einige Aufgaben müssen zu einem bestimmten Zeitpunkt ausgeführt werden. Zu diesem Zeitpunkt müssen wir geplante Aufgaben verwenden. In Python gibt es mehrere Bibliotheken von Drittanbietern, die zum Implementieren geplanter Aufgaben verwendet werden können, z. B. schedule, 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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen