当前位置:
首页 > Python基础教程 >
-
python基础教程之python网络-多任务实现之协程(2)
def main():
#创建loop回路
loop = asyncio.get_event_loop()
#创建task
#task = loop.create_task(fun())
#调用回调函数
#task.add_done_callback(callback)
task = asyncio.ensure_future(fun())
loop.run_until_complete(task)
print("fun函数的返回值是:%s"%format(task.result()))
if __name__ == "__main__":
main()
运行结果为:
---协程中---
fun函数的返回值是:Se7eN_HOU
四、await阻塞,执行并发
使用async可以定义协程对象,使用await可以针对耗时的操作进行挂起,就像生成器里的yield一样,函数让出控制权。协程遇到await,事件循环将会挂起该协程,执行别的协程,直到其他的协程也挂起或者执行完毕,再进行下一个协程的执行。
耗时的操作一般是一些IO操作,例如网络请求,文件读取等。我们使用asyncio.sleep函数来模拟IO操作。协程的目的也是让这些IO操作异步化。
例如:
import asyncio async def test1(): print("---1---") await asyncio.sleep(5) print("---2---") async def test2(): print("---3---") await asyncio.sleep(1) print("---4---") async def test3(): print("---5---") await asyncio.sleep(3) print("---6---") def main(): loop = asyncio.get_event_loop() print("begin") t1 = test1() t2 = test2() t3 = test3() tasks1 = [t1,t2,t3] loop.run_until_complete(asyncio.wait(tasks1)) print("end") loop.close() if __name__=="__main__": main()
运行结果为:
begin ---3--- ---1--- ---5--- ---4--- ---6--- ---2--- end
侯哥语录:我曾经是一个职业教育者,现在是一个自由开发者。我希望我的分享可以和更多人一起进步。分享一段我喜欢的话给大家:"我所理解的自由不是想干什么就干什么,而是想不干什么就不干什么。当你还没有能力说不得时候,就努力让自己变得强大,拥有说不得权利。"