详细分析python中的 async 和 await(附Demo),Python中的async与await详解(附Demo实例)

马肤

温馨提示:这篇文章已超过376天没有更新,请注意相关的内容是否还可用!

摘要:,,本文详细分析了Python中的async和await关键字,介绍了它们的概念、作用及在异步编程中的应用。文章通过Demo演示了如何使用async和await进行异步操作,包括异步函数的定义、调用以及异步流程的控制。整体上,async和await使得Python的异步编程更加简洁和直观,能有效提高程序性能和响应能力。

目录

基本知识

在Python中,async和await是用于异步编程的关键字,引入了异步/协程(coroutine)的概念,异步编程是一种处理并发任务的方式,使得程序能够在等待某些I/O操作(如文件读写、网络请求等)的同时继续执行其他任务,而不会发生阻塞。

使用协程可以更有效地利用系统资源,避免线程切换的开销,协程是一种轻量级的线程,可以在执行过程中暂停并让出控制权,然后在需要时恢复执行。

Demo

以下例子会一步步体现异步的重要性。

详细分析python中的 async 和 await(附Demo),Python中的async与await详解(附Demo实例) 第1张

1、Demo1(同步)

为了比较异步,先给出同步的例子。

2、Demo2(错误)

为了引入异步,先使用错误的代码进行演示,通过实战完善知识点:在Python中,async和await是一对配合使用的关键字,用于定义异步函数和在异步函数中等待其他异步操作完成,配合使用可以实现协程的特性,使得异步编程更加简洁和易于理解。

详细分析python中的 async 和 await(附Demo),Python中的async与await详解(附Demo实例) 第2张

3、Demo3(不正确的异步)

修正为正确的异步代码,使用async和await可以使异步编程更加直观和易于理解,避免了回调函数和复杂的异步调度逻辑,实现协程的特性,可以更灵活地处理异步任务。

4、Demo4(正确异步)

为了体现异步执行的效果,可以使用asyncio.create_task()创建任务并发执行,使用datetime模块记录程序开始和结束的时间,计算程序的执行时间。

详细分析python中的 async 和 await(附Demo),Python中的async与await详解(附Demo实例) 第1张

完整版

给出完整的代码示例。

拓展

对于上述代码,有个别函数进行拓展如下:

1、asyncio.create_task(coroutine)

asyncio.create_task()用于创建一个协程任务,并安排其立即执行,接受一个协程对象作为参数,并返回一个任务对象,该任务对象可以用来控制和管理该协程的执行,包括取消、等待其执行完成等。

详细分析python中的 async 和 await(附Demo),Python中的async与await详解(附Demo实例) 第4张

2、asyncio.gather(*coroutines_or_futures, return_exceptions=False)

asyncio.gather()用于同时运行多个协程,并等待全部完成,接受一系列的协程对象(或者Future对象)作为参数,并返回一个协程对象,该协程对象会在所有给定的协程都执行完毕后完成。

3、字符串拼接

对于输出函数来说,一般都由字符串组成,如果使用其他非字符串则需要进行转化,datetime.now()返回的是一个datetime对象,不能直接与字符串拼接,需要将datetime对象转换为字符串类型才能进行拼接,可以使用str()函数、字符串的format()方法或f-string格式化字符串来实现。

详细分析python中的 async 和 await(附Demo),Python中的async与await详解(附Demo实例) 第5张

本文详细介绍了Python中异步编程的基本知识,通过一系列的Demo展示了异步编程的重要性,对asyncio.create_task()、asyncio.gather()等函数进行了拓展解释,并介绍了字符串拼接的相关内容,希望本文能够帮助读者更好地理解Python中的异步编程。


0
收藏0
文章版权声明:除非注明,否则均为VPS857原创文章,转载或复制请以超链接形式并注明出处。

相关阅读

  • 【研发日记】Matlab/Simulink自动生成代码(二)——五种选择结构实现方法,Matlab/Simulink自动生成代码的五种选择结构实现方法(二),Matlab/Simulink自动生成代码的五种选择结构实现方法详解(二)
  • 超级好用的C++实用库之跨平台实用方法,跨平台实用方法的C++实用库超好用指南,C++跨平台实用库使用指南,超好用实用方法集合,C++跨平台实用库超好用指南,方法与技巧集合
  • 【动态规划】斐波那契数列模型(C++),斐波那契数列模型(C++实现与动态规划解析),斐波那契数列模型解析与C++实现(动态规划)
  • 【C++】,string类底层的模拟实现,C++中string类的模拟底层实现探究
  • uniapp 小程序实现微信授权登录(前端和后端),Uniapp小程序实现微信授权登录全流程(前端后端全攻略),Uniapp小程序微信授权登录全流程攻略,前端后端全指南
  • Vue脚手架的安装(保姆级教程),Vue脚手架保姆级安装教程,Vue脚手架保姆级安装指南,Vue脚手架保姆级安装指南,从零开始教你如何安装Vue脚手架
  • 如何在树莓派 Raspberry Pi中本地部署一个web站点并实现无公网IP远程访问,树莓派上本地部署Web站点及无公网IP远程访问指南,树莓派部署Web站点及无公网IP远程访问指南,本地部署与远程访问实践,树莓派部署Web站点及无公网IP远程访问实践指南,树莓派部署Web站点及无公网IP远程访问实践指南,本地部署与远程访问详解,树莓派部署Web站点及无公网IP远程访问实践详解,本地部署与远程访问指南,树莓派部署Web站点及无公网IP远程访问实践详解,本地部署与远程访问指南。
  • vue2技术栈实现AI问答机器人功能(流式与非流式两种接口方法),Vue2技术栈实现AI问答机器人功能,流式与非流式接口方法探究,Vue2技术栈实现AI问答机器人功能,流式与非流式接口方法详解
  • 发表评论

    快捷回复:表情:
    评论列表 (暂无评论,0人围观)

    还没有评论,来说两句吧...

    目录[+]

    取消
    微信二维码
    微信二维码
    支付宝二维码