Computer stellen nicht nur Prozesse und Threads bereit. Coroutine ist ein künstlich erstellter Mikroprozess zum Wechseln des Benutzermodus, bei dem ein Thread verwendet wird, um zwischen mehreren Prozessen hin und her zu wechseln.
Mehrere Methoden zur Implementierung von Coroutine. Status speichern
asyncio decorator (3.4)
async, waiting keyword (3.5) [Empfohlen]
1.1greenlet implementiert Coroutine
pip install greenlet from greenlet import greenlet def fun1(): gre2.switch()#切换到fun2 pass def fun2(): gre1.switch()#切换到fun1 pass gre1 = greenlet(func1) gre2 = greenlet(func2) gre1.switch()#先去执行fun1
1.3 Verwenden Sie das Asyncio-Modul, um Coroutinen implementieren
def func1(): yield 1 yield from func2() yield 2 def func2(): yield 3 yield 4 f1 = func1() for item in f1: print(item,end=" ") #打印结果 1 3 4 2
import asyncio #使用该装饰器装饰后,该函数就是一个协程函数 @asyncio.coroutine def func1(): print(1) #遇到IO操作时,会自动切换到taks中的其他任务函数 yield from asyncio.sleep(2) print(2) @asyncio.coroutine def func2(): print(3) yield from asyncio.sleep(2) print(4) #将两个协程函数封装成一个tasks列表 tasks = [ asyncio.ensure_future(func1()), asyncio.ensure_future(func2()) ] # loop = asyncio.get_event_loop() loop.run_until_complete(func1())
import asyncio #使用该装饰器装饰后,该函数就是一个协程函数 async def func1(): print(1) #遇到IO操作时,会自动切换到tasks中的其他任务函数 await asyncio.sleep(2) print(2) async def func2(): print(3) await asyncio.sleep(2) print(4) #将两个协程函数封装成一个tasks列表 tasks = [ asyncio.ensure_future(func1()), asyncio.ensure_future(func2()) ] loop = asyncio.get_event_loop() loop.run_until_complete(tasks)
Coroutine-Objekt: Beim Ausführen einer Coroutine-Funktion wird ein Coroutine-Objekt erhalten.
#协程请求资源使用第三方库aiohttp import aiohttp
#伪代码 任务列表 = [task1,task2...] while True: for 就绪任务 in 可执行任务列表: 执行 for 已完成任务 in 已完成任务列表: 从任务列表中删除 import asyncio #生成一个书简循环 loop = asyncio.get_event_loop() #将任务放到任务列表中 loop.run_until_complete(任务)
Das obige ist der detaillierte Inhalt vonWas sind die Implementierungsmethoden von Python-Coroutinen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!