Python3 协程 await async 相关的用法和笔记

发布时间 2023-11-15 16:31:35作者: 华腾海神

想要提供可以进行协程切换的awaitable,可以使用下面的方法:

1   任务task
async def func():
    print("yes Wait")

task = asyncio.create_task(func())
await task
2   协程对象,可以使async def 定义的协程函数(是否能触发切换不一定,要看函数内容)
    函数内可以利用asyncio.sleep(0) # https://docs.python.org/zh-cn/3/library/asyncio-task.html#sleeping
    该函数可以实现协程切换
3   asyncio.sleep(0).__await__()
    只好借用已经实现的__await__()


并发执行协程
可以如下:
loop = asyncio.get_event_loop()
tasks = [greenlet_func(x) for x in ["name", "key"]]
loop.run_until_complete(asyncio.wait(tasks))
loop.close()
也可以:
async def func():
    await asyncio.sleep(0)
    return "yes"

async def main(x):
    print(x)
    print(await func())
    
async def run():
    await asyncio.gather(main("VV"), main("NN"), main("MM"))

asyncio.run(run())