赞
踩
在学习Javascript的时候随处可见的异步回调,我在思考Python 是否也可以实现异步回调。前几次的学习明白了Python利用协程实现异步的方法,那接下来实现回调不就简单了吗?记录学习过程。
Python 3.7
一、正常的回调
- import time
- import asyncio
-
- #这是一个回调函数
- def callback(ret,err):
- print("显示回调结果:",end="\n")
- print(ret,err)
-
- # 带有回调功能的函数
- def task_b(arg_1,callback):
- print("我是任务b,我需要执行5秒,执行结束有回调。",end="\n")
- ret = ""
- err = ""
- time.sleep(5)
- if arg_1 <5:
- ret = arg_1
- else:
- err = "Error"
- print("任务b执行结束")
- callback(ret,err)
-
- # 正常的函数 执行10秒
- def task_a():
- print("我是任务a,需要执行10秒,没有回调。",end="\n")
- time.sleep(10)
- print("任务a结束",end="\n")
-
- if __name__ == '__main__':
- task_b(2,callback)
- task_a()
-
结果:
二、异步回调
- import time
- import asyncio
-
- #这是一个回调函数
- def callback(ret,err):
- print("显示回调结果:",end="\n")
- print(ret,err)
-
- # 带有回调功能的函数
- def task_b(arg_1,callback):
- print("我是任务b,我需要执行5秒,执行结束有回调。",end="\n")
- ret = ""
- err = ""
- time.sleep(5)
- if arg_1 <5:
- ret = arg_1
- else:
- err = "Error"
- print("任务b执行结束")
- #开始调用回调函数
- callback(ret,err)
-
- # 正常的函数 执行10秒
- def task_a():
- print("我是任务a,需要执行10秒,没有回调",end="\n")
- time.sleep(10)
- print("任务a结束",end="\n")
-
- # 创建协程函数实现异步
- async def async_task_a():
- future = loop.run_in_executor(None,task_a)
- response = await future
-
- # 创建协程函数实现异步
- async def async_task_b(arg_1):
- future = loop.run_in_executor(None,task_b,arg_1,callback)
- response = await future
-
- if __name__ == '__main__':
- loop = asyncio.get_event_loop()
- tasks = [asyncio.ensure_future(async_task_a()),asyncio.ensure_future(async_task_b(2))]
- loop.run_until_complete(asyncio.wait(tasks))
- loop.close()
-
结果:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。