赞
踩
异步编程 3.1 事件循环 inport asyncio # 去生成或获取一个事件循环 loop = asyncio.get_event_loop() # 将任务放到'任务列表' loop.run_until_complete(任务) 3.2 快速上手 协程函数,定义函数时候async def 函数名 协程对象,执行协程函数()得到的协程对象 async def func(): pass result = func() 注意: 执行协程函数创建协程对象,函数内部代码不会执行 如果想要运行协程函数内部代码,必须要将协程对象交给事件循环来处理 import asyncio async def func(): print("k=快来学习吧") result = func() loop= async.get_event_loop() loop.run_until_complete(result) # asyncio.run(result) python3.7及之后 3.3 await await + 可等待的对象(协程对象、Future、Task对象 --> IO等待) import asyncio async def func(): print() response = await asyncio.sleep(2) print("结束", response) asyncio.run(func()) 3.4 Task对象 作用:在事件循环中添加多个任务 Tasks用于并发协程调度,通过asyncio.create_task(协程对象)的方式创建Task对象, 这样可以让协程加入事件循环中等待被调度执行。除了使用asyncio.create_task()函数以外,还可以用低层级的 loop.create_task()或ensure_future()函数。不建议手动实例化Task对象。 注意: asyncio.create_task()函数在python3.7中被加入,在python3.7之前改用低层级的asyncio.ensure_future()函数 示例1: import asyncio async def func(): print(1) await asyncio.sleep(2) print(2) return "返回值" async def main(): print("main开始") task1 = asyncio.create_task(func()) task2 = asyncio.create_task(func()) print("main结束") ret1 = await task1 ret1 = await task2 print(ret1, ret2) asyncio.run(mian()) 示例2: import asyncio async def func(): print(1) await asyncio.sleep(2) print(2) return "返回值" async def main(): print("main开始") task_list = [ asyncio.create_task(func(), name='n1'), asyncio.create_task(func(), name='n2') ] print("main结束") done, pending = await asyncio.wait(task_list, timeout=None) print(done) print(pending) asyncio.run(main()) # 执行此代码后事件循环已经创建 示例3: import asyncio async def func(): print(1) await asyncio.sleep(2) print(2) return "返回值" task_list = [ func(), func(), ] # done, pending = await asyncio.wait(task_list, timeout=None) done, pending = asyncio.run(asyncio.wait(task_list)) print(done) print(pending)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。