当前位置: 首页 > news >正文

asyncio模块学习

asyncio模块学习

Python中的异步编程的核心语法就是async/await两个关键字,主要涉及的概念就是协程(coroutine)。关于协程的解释,简单来说,协程就是在一个线程(thread)里通过事件循环(event loop)模拟出多个线程并发的效果。

Python中的协程概念

在Python中,协程coroutine有两层含义:

  1. 使用async def定义的函数是一个coroutine,这个函数内部可以用await关键字。
  2. 使用async def定义的函数,调用之后返回的值,是一个coroutine对象,可以被用于await或者asyncio.run等

我们可以看到:

  1. 第一层含义是语法层面的概念,一个函数(一段代码)由async def定义,那么它就是一个coroutine。带来的效果是,这个函数内部可以用await。那么反过来就是说,一个普通的def定义的函数,内部不能用await,否则就会触发语法错误(SyntaxError)。
  2. 第二层含义是Python解释器运行时的概念,coroutine是Python解释器里内置的一个类。当我们调用async def定义的函数时,得到的返回值的类型就是coroutine。

create_task()函数创建协程任务

import asyncioasync def my_coroutine():print("Coroutine started")await asyncio.sleep(1)print("Coroutine resumed")async def main():print("Main program started")task = asyncio.create_task(my_coroutine())  # 创建协程任务await taskprint("Main program finished")asyncio.run(main())  # 执行主协程

gather()函数创建并发执行的多个任务

import asyncioasync def task1():print("Task 1 started")await asyncio.sleep(1)print("Task 1 completed")async def task2():print("Task 2 started")await asyncio.sleep(2)print("Task 2 completed")async def main():print("Main program started")await asyncio.gather(task1(), task2())  # 并发执行两个任务print("Main program finished")asyncio.run(main())  # 运行主协程

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • webrtc学习笔记2
  • Dubbo服务自动Web化之路
  • CPU的功能和基本结构
  • 优思学院|六西格玛实施关键:如何整合定性与定量数据
  • 10-使用sentinel流控
  • 免费Excel数据批量转Word工具
  • Affine Transformations仿射变换
  • Android的日志工具Log
  • 负载均衡---相关概念介绍(一)
  • 华为AR1220配置GRE隧道
  • 国外有哪些好用的AI工具?
  • 【MySQL】索引和事务
  • SQLite 创建表
  • Linux | Linux开发工具链全攻略:yum、vim、gcc/g++、GDB、Makefile与git版本控制
  • 解密!抖音百万粉丝博主三维地图视频都用到了什么GIS数据和技术
  • css系列之关于字体的事
  • ES6语法详解(一)
  • exports和module.exports
  • httpie使用详解
  • laravel 用artisan创建自己的模板
  • oschina
  • php的插入排序,通过双层for循环
  • RxJS 实现摩斯密码(Morse) 【内附脑图】
  • scrapy学习之路4(itemloder的使用)
  • Spring Security中异常上抛机制及对于转型处理的一些感悟
  • Tornado学习笔记(1)
  • 阿里云ubuntu14.04 Nginx反向代理Nodejs
  • 高程读书笔记 第六章 面向对象程序设计
  • 互联网大裁员:Java程序员失工作,焉知不能进ali?
  • 解决iview多表头动态更改列元素发生的错误
  • 解决jsp引用其他项目时出现的 cannot be resolved to a type错误
  • 小程序开发中的那些坑
  • 新书推荐|Windows黑客编程技术详解
  • 整理一些计算机基础知识!
  • ​​​​​​​Installing ROS on the Raspberry Pi
  • ​如何在iOS手机上查看应用日志
  • ## 1.3.Git命令
  • #include
  • (02)vite环境变量配置
  • (2)关于RabbitMq 的 Topic Exchange 主题交换机
  • (2024,RWKV-5/6,RNN,矩阵值注意力状态,数据依赖线性插值,LoRA,多语言分词器)Eagle 和 Finch
  • (3)nginx 配置(nginx.conf)
  • (ISPRS,2023)深度语义-视觉对齐用于zero-shot遥感图像场景分类
  • (LeetCode 49)Anagrams
  • (Ruby)Ubuntu12.04安装Rails环境
  • (编译到47%失败)to be deleted
  • (附源码)计算机毕业设计SSM智能化管理的仓库管理
  • (亲测有效)解决windows11无法使用1500000波特率的问题
  • (四十一)大数据实战——spark的yarn模式生产环境部署
  • (学习日记)2024.02.29:UCOSIII第二节
  • (原创)boost.property_tree解析xml的帮助类以及中文解析问题的解决
  • (转)用.Net的File控件上传文件的解决方案
  • .apk文件,IIS不支持下载解决
  • .gitignore
  • .Net core 6.0 升8.0