当前位置:   article > 正文

一段代码理解Python异步函数async的基本用法_python异步执行函数

python异步执行函数

异步函数的使用规则

正常情况下我们的函数时串行的运行的,这里称之为主函数.

异步函数:与主函数并行运行.

Python异步函数即async必须在普通函数的命名前加上async

示例:

  1. async def case_b():
  2. print('start', get_time(), 'case_b')
  3. await asyncio.sleep(1)
  4. print('end', get_time(), 'case_b')

执行async函数

  1. if __name__ == '__main__':
  2. asyncio.run(case_b())

async函数内等待:只阻塞当前async函数

await asyncio.sleep(2)

async函数的代码示例

m_mock安装

  1. import asyncio
  2. import time
  3. from x_mock.m_mock import m_mock
  4. def get_time():
  5. return m_mock.mock('@time("%H:%M:%S.%f")')
  6. async def case_a():
  7. print('start', get_time(), 'case_a')
  8. await asyncio.sleep(2) # 只阻塞当前函数,所以比case_b 多等 1s,下面这句最后打印
  9. print('end', get_time(), 'case_a')
  10. async def case_b():
  11. print('start', get_time(), 'case_b')
  12. await asyncio.sleep(1)
  13. print('end', get_time(), 'case_b')
  14. async def main():
  15. await asyncio.gather(
  16. case_a(),
  17. case_b()
  18. )
  19. if __name__ == '__main__':
  20. start = time.time()
  21. # asyncio.run(main()) # 运行方式1
  22. # 运行方式2
  23. loop = asyncio.get_event_loop()
  24. loop.run_until_complete(main())
  25. print(time.time() - start)

通过上述代码示例可以发现case_a和case_b通过async并行运行了,但是case_a由于使用await等待2s比case_b的结果晚一秒出现.

打印异步函数的返回值示例

  1. import asyncio
  2. import time
  3. from x_mock.m_mock import m_mock
  4. def get_time():
  5. return m_mock.mock('@time("%H:%M:%S.%f")')
  6. async def case_a():
  7. print('start', get_time(), 'case_a')
  8. await asyncio.sleep(2) # 只阻塞当前函数,所以比case_b 多等 1s,下面这句最后打印
  9. print('end', get_time(), 'case_a')
  10. return 'case_a'
  11. async def case_b():
  12. print('start', get_time(), 'case_b')
  13. await asyncio.sleep(1)
  14. print('end', get_time(), 'case_b')
  15. return 'case_b'
  16. async def main():
  17. return await asyncio.gather(
  18. case_a(),
  19. case_b()
  20. )
  21. if __name__ == '__main__':
  22. start = time.time()
  23. # asyncio.run(main()) # 运行方式1,不建议,会有一些报错
  24. # 运行方式2
  25. loop = asyncio.get_event_loop()
  26. print(loop.run_until_complete(main()))
  27. print(time.time() - start)

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

闽ICP备14008679号