当前位置:   article > 正文

Python 实现 异步回调实现的探索_python 异步回调

python 异步回调

在学习Javascript的时候随处可见的异步回调,我在思考Python 是否也可以实现异步回调。前几次的学习明白了Python利用协程实现异步的方法,那接下来实现回调不就简单了吗?记录学习过程。

Python 3.7

一、正常的回调

  1. import time
  2. import asyncio
  3. #这是一个回调函数
  4. def callback(ret,err):
  5. print("显示回调结果:",end="\n")
  6. print(ret,err)
  7. # 带有回调功能的函数
  8. def task_b(arg_1,callback):
  9. print("我是任务b,我需要执行5秒,执行结束有回调。",end="\n")
  10. ret = ""
  11. err = ""
  12. time.sleep(5)
  13. if arg_1 <5:
  14. ret = arg_1
  15. else:
  16. err = "Error"
  17. print("任务b执行结束")
  18. callback(ret,err)
  19. # 正常的函数 执行10秒
  20. def task_a():
  21. print("我是任务a,需要执行10秒,没有回调。",end="\n")
  22. time.sleep(10)
  23. print("任务a结束",end="\n")
  24. if __name__ == '__main__':
  25. task_b(2,callback)
  26. task_a()

结果:

 

二、异步回调

  1. import time
  2. import asyncio
  3. #这是一个回调函数
  4. def callback(ret,err):
  5. print("显示回调结果:",end="\n")
  6. print(ret,err)
  7. # 带有回调功能的函数
  8. def task_b(arg_1,callback):
  9. print("我是任务b,我需要执行5秒,执行结束有回调。",end="\n")
  10. ret = ""
  11. err = ""
  12. time.sleep(5)
  13. if arg_1 <5:
  14. ret = arg_1
  15. else:
  16. err = "Error"
  17. print("任务b执行结束")
  18. #开始调用回调函数
  19. callback(ret,err)
  20. # 正常的函数 执行10秒
  21. def task_a():
  22. print("我是任务a,需要执行10秒,没有回调",end="\n")
  23. time.sleep(10)
  24. print("任务a结束",end="\n")
  25. # 创建协程函数实现异步
  26. async def async_task_a():
  27. future = loop.run_in_executor(None,task_a)
  28. response = await future
  29. # 创建协程函数实现异步
  30. async def async_task_b(arg_1):
  31. future = loop.run_in_executor(None,task_b,arg_1,callback)
  32. response = await future
  33. if __name__ == '__main__':
  34. loop = asyncio.get_event_loop()
  35. tasks = [asyncio.ensure_future(async_task_a()),asyncio.ensure_future(async_task_b(2))]
  36. loop.run_until_complete(asyncio.wait(tasks))
  37. loop.close()

结果:
 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/102668
推荐阅读
相关标签
  

闽ICP备14008679号