Python ist eine beliebte Programmiersprache, die aufgrund ihrer Einfachheit, leichten Erlernbarkeit und ihres breiten Anwendungsspektrums weit verbreitet ist. Unter diesen ist Coroutine ein sehr wichtiges Konzept in Python und eine der Grundlagen der asynchronen IO-Programmierung in Python. Dieser Artikel enthält eine detaillierte Erklärung von Coroutinen in Python.
1. Was ist eine Coroutine? Coroutine ist ein leichter Thread im Benutzermodus, der portabler ist als Betriebssystem-Threads. Es wird vom Programmierer im Programm implementiert, sodass kein Kontextwechsel erforderlich ist. Der Coroutine-Wechsel wird vom Programm selbst ohne externen Eingriff durchgeführt. Dadurch kann auch die Erstellung von Threads reduziert und die CPU-Ressourcen effizienter genutzt werden.
Merkmale von Coroutinen:
können gleichzeitig im selben Thread ausgeführt werden, und der Umschaltaufwand ist sehr gering, sodass eine hohe Parallelität unterstützt wird.Es gibt drei Möglichkeiten, Coroutinen in Python zu implementieren: Generator, Async/Await und kombiniert mit Gevent. Im Folgenden stellen wir sie einzeln vor.
GeneratorHier ist ein Beispiel für eine Coroutine:
def simple_coroutine(): print('-> coroutine started') x = yield print('-> coroutine received:', x) # 调用协程 my_coroutine = simple_coroutine() print(my_coroutine) # <generator object simple_coroutine at 0x7f6b25c43eb0> # 先启动协程,让协程处于暂停状态。 next(my_coroutine) # -> coroutine started # 发送消息给协程,它会恢复执行,并打印出消息 my_coroutine.send('hello world') # -> coroutine received: hello world
In diesem Beispiel enthält die Funktion simple_coroutine einen Yield-Ausdruck, der das Vorzeichen einer Generator-Coroutine ist. Wenn die Funktion aufgerufen wird, gibt sie ein Generatorobjekt zurück. Das Programm bringt den Generator durch Aufrufen der Methode next() zur ersten yield-Anweisung und gibt die Meldung „-> Coroutine gestartet“ aus. Dann schickten wir eine Nachricht „Hallo Welt“ an den Generator, die in der Variablen x erfasst und ausgedruckt wurde „-> Coroutine empfangen: Hallo Welt“.
async/awaitHier ist ein Beispiel für async/await:
import asyncio async def countdown(n): while n > 0: print(f'T-minus {n}') await asyncio.sleep(1.0) n -= 1 asyncio.run(countdown(3))
In diesem Beispiel können wir mit async/await das Schlüsselwort async in der Funktion verwenden, um die Coroutine zu definieren, und mit „await“ die Coroutine anhalten. Um die Async/Await-Syntax verwenden zu können, müssen wir natürlich die Asyncio-Bibliothek verwenden.
Verwendung mit geventHier ist ein Beispiel für die Verwendung von gevent:
import gevent def task(pid): """ 函数中的sleep模拟阻塞一段时间,通过gevent中的异步框架进行并发。 """ gevent.sleep(0.5) print(f'Task {pid} done') def synchronous(): """ 任务同步执行 """ for i in range(1, 10): task(i) def asynchronous(): """ 任务异步执行 """ threads = [gevent.spawn(task, i) for i in range(10)] gevent.joinall(threads) print('Synchronous:') synchronous() print('Asynchronous:') asynchronous()
In diesem Beispiel verwenden wir das Gevent-Framework, um asynchrone Coroutinen zu implementieren. Anhand dieses Beispiels können wir deutlich erkennen, dass während der asynchronen Ausführung Aufgaben abwechselnd ausgeführt werden und dabei die asynchronen Eigenschaften von Coroutinen ausgenutzt werden. Bei der synchronen Ausführung können wir sehen, dass Aufgaben einzeln ausgeführt werden.
3. Vor- und Nachteile von Coroutinen
Vorteile:
Coroutinen sind standardmäßig Single-Threaded, wodurch der durch Multi-Thread-Switching verursachte Overhead vermieden und die Programmausführungsgeschwindigkeit verbessert wird.In diesem Artikel werden das Konzept, die Implementierungsmethoden sowie die Vor- und Nachteile von Coroutinen in Python ausführlich vorgestellt. Coroutinen sind ein sehr wichtiges Konzept in Python und eine der Grundlagen der asynchronen IO-Programmierung. Durch Coroutinen können wir Unternehmen gleichzeitig im selben Thread ausführen, die Effizienz der Programmausführung verbessern, viel Aufwand für den Kontextwechsel vermeiden und Systemressourcen erheblich einsparen. Coroutinen weisen jedoch auch einige Mängel auf, z. B. dass Programmierer über hohe Programmierkenntnisse und unvollständige Fehlerbehandlungsmechanismen verfügen müssen. Auf diese Probleme müssen Programmierer bei der Verwendung von Coroutinen achten.
Das obige ist der detaillierte Inhalt vonDetaillierte Erklärung von Coroutinen in Python. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!