Rumah >pembangunan bahagian belakang >Tutorial Python >Apakah kaedah pelaksanaan coroutine Python?
Coroutine tidak disediakan oleh komputer hanya menyediakan: proses dan rangkaian. Coroutine ialah proses mikro yang dicipta secara buatan untuk penukaran mod pengguna, menggunakan satu benang untuk bertukar-tukar antara berbilang proses
Beberapa cara untuk melaksanakan coroutine
greenlet : Modul awal
kata kunci hasil: boleh simpan kod, simpan keadaan
asyncio decorator (3.4)
async, tunggu kata kunci (3.5) [Disyorkan]
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
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())1.4async & tunggu kata kunci melaksanakan coroutine
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)2. Maksud Coroutine Sekiranya benang menghadapi masa menunggu IO, benang tidak akan menunggu dengan bodoh, tetapi akan menggunakan masa terbiar untuk Melakukan perkara lain, iaitu, proses itu dilaksanakan secara tak segerak.
#协程请求资源使用第三方库aiohttp import aiohttp3. Pengaturcaraan tak segerak 3.1 Gelung masa difahami sebagai gelung tak terhingga untuk mengesan dan melaksanakan kod tertentu
#伪代码 任务列表 = [task1,task2...] while True: for 就绪任务 in 可执行任务列表: 执行 for 已完成任务 in 已完成任务列表: 从任务列表中删除 import asyncio #生成一个书简循环 loop = asyncio.get_event_loop() #将任务放到任务列表中 loop.run_until_complete(任务)3.2 Kes
Fungsi Coroutine
,Apabila mentakrifkan fungsi, gunakan nama fungsi async defObjek Coroutine: Apabila melaksanakan fungsi coroutine Dapatkan objek coroutineasync def func(): pass result = func()Nota: Untuk objek coroutine yang diperoleh semasa melaksanakan fungsi coroutine, kod di dalam fungsi tidak akan dilaksanakan
import asyncio async def func(): print("哈喽") f = func()#协程对象 loop = asyncio.get_event_loop()#创建循环对象 loop.run_until_complete(f)#通过循环对象执行协程对象 #python3.7可以直接 asyncio.run(f)3.3menunggu kata kuncimenunggu + objek yang boleh ditunggu {coroutine objects, Future objects, Task objects} (serupa dengan I O waiting)
import asyncio async def func(): print("哈喽") re = await asyncio.sleep(2) print(re) asyncio.run(func())menunggu ialah menunggu nilai objek mendapat keputusan sebelum meneruskan pelaksanaan
import asyncio async def other(): print("start") await asyncio.sleep(2) print("end") return 1 async def fun(): print("执行协程函数内部代码") #遇到IO操作时会挂起当前协程任务,等IO操作完成后再继续往下执行,当前协程挂起时,时间循环对象可以执行其他协程任务 re = await other() print("IO请求结束,结果为:",re) asyncio.run(func())Hasil pelaksanaan
Permintaan IO tamat, hasilnya ialah: 1
Laksanakan kod dalaman fungsi coroutine
mula
tamat
Atas ialah kandungan terperinci Apakah kaedah pelaksanaan coroutine Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!