Heim > Artikel > Backend-Entwicklung > Detaillierte Erklärung von Coroutinen in Python (mit Beispielen)
Dieser Artikel bietet Ihnen eine detaillierte Erklärung von Coroutinen in Python (mit Beispielen). Ich hoffe, dass er für Freunde in Not hilfreich ist.
Coroutinen, auch bekannt als Mikrofäden und Fasern. Der englische Name Coroutine
sieht aus wie eine Unterroutine, kann jedoch während der Ausführung innerhalb der Unterroutine unterbrochen werden, dann zur Ausführung anderer Unterroutinen wechseln und dann zu gegebener Zeit zurückkehren, um die Ausführung fortzusetzen.
Yield implementiert Coroutinen
Pythons Unterstützung für Coroutinen ist immer noch sehr begrenzt. In Generatoren kann Yield Coroutinen bis zu einem gewissen Grad implementieren. Obwohl die Unterstützung noch nicht vollständig ist, kann sie bereits erhebliche Macht entfalten.
import threading import time def producer(c): c.__next__() n=0 while n c.send(n) --> n更新 n = yield r if not n: break print('[消费者]正在调用第%s条数据' %(n)) time.sleep(1) r = 'This is ok!' if __name__=='__main__': print(threading.current_thread()) print(threading.active_count()) #查看当前进行的线程 c = consumer() producer(c) #函数中有yield, 返回值为生成器; print(threading.active_count()) #1
gevent-Bibliothek implementiert Coroutinen
Python bietet grundlegende Unterstützung für Coroutinen durch yield , jedoch nicht vollständig . Das Gevent eines Drittanbieters bietet relativ vollständige Coroutine-Unterstützung für Python.
gevent ist eine Bibliothek eines Drittanbieters, die Coroutinen über Greenlets implementiert. Die Grundidee ist:Da die Umschaltung während der E/A-Vorgänge automatisch abgeschlossen wird, muss gevent einige der mit Python gelieferten Standardbibliotheken ändern. Dieser Vorgang wird beim Start durch einen Monkey-Patch abgeschlossen.
Angenommen, die von mehreren Coroutinen ausgeführten Aufgaben haben keine E/A-Operationen oder Wartezeiten, dann werden die Coroutinen nacheinander und nicht abwechselnd ausgeführt.
Angenommen, die von mehreren Coroutinen ausgeführten Aufgaben haben E/A-Operationen oder Wartezeiten, dann Coroutinen abwechselnd ausführen; Ein Vergleichsexperiment zur Zeit, die Coroutinen und Threads mit Threads verbringen
ist nicht aufschlussreich. #没有等待
import gevent
from gevent import monkey
monkey.patch_all()
def job(n):
for i in range(n):
print(gevent.getcurrent(),i)
def mian():
g1 = gevent.spawn(job,1)
g2 = gevent.spawn(job,2)
g3 = gevent.spawn(job,3)
gevent.joinall([g1,g2,g3])
print('协程执行任务结束...')
if __name__=="__main__":
mian()
Das obige ist der detaillierte Inhalt vonDetaillierte Erklärung von Coroutinen in Python (mit Beispielen). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!