快速入门Python的异步库:asyncio
目录
异步
Python asyncio
1. async 关键字
2. await 关键字
3. asyncio.run()
4. asyncio.sleep()
5. 协程
程序执行流程
可以被等待的异步
协程
任务
Futures
任务
asyncio.create_task()
await 和任务结果
Reference
异步
我们首先先来谈谈异步,你应该遇到过这样的场景:
在一个单线程中你总是需要做一些复杂的事情,但是这些复杂的事情往往可能跟我们想干的其他事情几乎只有接口上的关系!(何为接口上的关系呢:我只是希望调用这个接口,并且在完成这个工作后告诉我这一接口实行的功能返回给我的结果是如何的,而并不关心内部到底如何运作!这样的任务就是我们的目标。
这在涉及到界面编程场景的时候非常多,比如说我想要做耗时的网络操作,有需要实时的刷新Ui。这个时候,我们的就会希望把耗时的网络操作,或者是界面刷新分为两个线程干,但是互相不关心两者的关系(只是接口关系),面对这样的耗时的但却两者不相关的操作的时候,我们往往希望给它们进行分离。异步这一概念就是对这一场景的一个抽象。
Python asyncio
Python自身就提供了一个相对完善的异步库。请看VCR。
import asyncio import time async def do_hardy_task() -> str:print("do hardy task started")print(f"task started at {time.strftime('%X')}") await asyncio.sleep(1) print(f"task finished at {time.strftime('%X')}") return "done!" # 这个可以是结果 async def main():print("Running in the top level...")result = await do_hardy_task()print("Done!") # Start the run asyncio.run(main())
这段程序的输出如下
Running in the top level... do hardy task started task started at 18:01:23 task finished at 18:01:24 Done!
这个程序并没有发挥真正的并发优势,但是把asyncio的关键字说明了一下:
1. async
关键字
async
关键字用于定义异步函数。异步函数是通过asyncio
事件循环来调度执行的,它们不会阻塞主程序的执行。使用async
标记函数时,它返回一个协程对象,而不是一个普通的返回值。
在代码中,do_hardy_task
和main
都是用async
定义的异步函数。
-
async def do_hardy_task() -> str:
:这表示do_hardy_task
是一个异步函数,返回一个str
类型的结果。 -
async def main():
:这表示main
函数也是异步的。
2. await
关键字
await
用来等待一个异步操作的结果。当你在异步函数中使用await
时,它会暂停该函数的执行,直到等待的异步操作完成,然后继续执行。这个过程不会阻塞主程序的其他任务。
在这段代码中,await asyncio.sleep(1)
使得do_hardy_task
函数暂停1秒钟,但这期间不会阻塞其他可能的异步任务。
-
await asyncio.sleep(1)
:这是一个异步的睡眠操作,模拟了一个耗时操作(如硬性任务)。它会暂停1秒钟并释放控制权给事件循环,允许其他任务继续执行。
3. asyncio.run()
asyncio.run()
是一个用于启动异步程序的函数。它接受一个协程作为参数,并运行事件循环直到该协程完成。调用asyncio.run(main())
时,它启动了事件循环,执行main()
协程,并在所有异步操作完成后关闭事件循环。
-
asyncio.run(main())
:这里会启动main
异步函数的执行。
4. asyncio.sleep()
asyncio.sleep()
是一个异步的睡眠函数,它不会阻塞程序的执行,而是将控制权返回给事件循环。通过这种方式,其他异步任务可以在sleep
期间运行。
-
await asyncio.sleep(1)
:这表示当前任务将会等待1秒钟,但在此期间不会阻塞其他异步任务。
5. 协程
在async
定义的函数实际上是返回一个协程(coroutine)(有趣的是这个更加像是一个对象)。协程是一个可暂停和恢复的函数,它可以与事件循环一起工作,通过异步的方式并行执行任务。在这段代码中,do_hardy_task()
和main()
都是协程。
程序执行流程
我们来看看程序实际上的执行流程是如何的:
-
当调用
asyncio.run(main())
时,main()
异步函数开始执行。 -
main()
中调用了await do_hardy_task()
,导致程序进入do_hardy_task
函数。 -
在
do_hardy_task
中,await asyncio.sleep(1)
使任务暂停1秒,但在这期间可以执行其他任务。 -
一秒钟后,
do_hardy_task
继续执行,打印出任务结束的时间,并返回结果"done!"
。 -
main()
接收到返回值后,打印出"Done!"
。
这样,asyncio
实现了异步执行,使得即使存在耗时操作,也不会阻塞程序的其他任务
可以被等待的异步
我们下面来看看那些可以被等待的异步对象。一般的我们说有三个:协程函数,任务和Future(期许啥的)。下面的部分被来自Python Documentation
协程
Python 协程属于 可等待 对象,因此可以在其他协程中被等待:
import asyncio async def nested():return 42 async def main():# 如果我们只调用 "nested()" 则无事发生。# 一个协程对象会被创建但是不会被等待,# 因此它 *根本不会运行*。# nested() # 将引发 "RuntimeWarning"。 # 现在让我们改为等待它:print(await nested()) # 将打印 "42"。 asyncio.run(main())
-
协程函数: 定义形式为 async def 的函数;
-
协程对象: 调用 协程函数 所返回的对象。
任务
任务 被用来“并行的”调度协程当一个协程通过 asyncio.create_task() 等函数被封装为一个 任务,该协程会被自动调度执行:
import asyncio async def nested():return 42 async def main():# 将 nested() 加入计划任务# 立即与 "main()" 并发运行。task = asyncio.create_task(nested()) # 现在可以使用 "task" 来取消 "nested()",or# 或简单地等待它直到它被完成:await task asyncio.run(main())
Futures
Future 是一种特殊的 低层级 可等待对象,表示一个异步操作的 最终结果。当一个 Future 对象 被等待,这意味着协程将保持等待直到该 Future 对象在其他地方操作完毕。在 asyncio 中需要 Future 对象以便允许通过 async/await 使用基于回调的代码。通常情况下 没有必要 在应用层级的代码中创建 Future 对象。Future 对象有时会由库和某些 asyncio API 暴露给用户,用作可等待对象:
async def main():await function_that_returns_a_future_object() # 这样也可以:await asyncio.gather(function_that_returns_a_future_object(),some_python_coroutine())
一个很好的返回对象的低层级函数的示例是 loop.run_in_executor()。
任务
刚刚我们看到了任务这个概念,下面我们来看看常见的API。
import asyncio import time async def do_hard_task() -> str:print("Shell start handling hard task") # mulipulate the hard taskawait asyncio.sleep(5) return "done!" async def main():print("shell depatch the task :) ") task = asyncio.create_task(do_hard_task()) print("the task has been depatched") result = await task print(result) asyncio.run(main())
我们在这里看看用到了啥。
asyncio.create_task()
-
task = asyncio.create_task(do_hard_task())
使用asyncio.create_task()
创建一个新的任务。这将do_hard_task()
协程调度到事件循环中执行,并返回一个task
对象。 -
create_task()
会立即返回一个任务对象,而任务本身是异步执行的。注意,这个任务并不会阻塞后续代码的执行,因此它会在后台运行。
await
和任务结果
-
result = await task
等待task
完成,意味着程序会暂停在这里直到do_hard_task
执行结束并返回结果。在这段时间内,事件循环允许其他任务运行(如果有的话)。 -
await task
会将task
的返回结果赋给result
,然后打印出来。
任务当然还可以被取消。当任务被取消时,asyncio.CancelledError 将在遇到机会时在任务中被引发。所以,对于用户态推荐协程使用 try/finally
代码块来可靠地执行清理逻辑。 对于 asyncio.CancelledError 被显式捕获的情况,它通常应当在清理完成时被传播。 asyncio.CancelledError 会直接子类化 BaseException 因此大多数代码都不需要关心这一点。
启用结构化并发的 asyncio 组件,如 asyncio.TaskGroup 和 asyncio.timeout(),在内部是使用撤销操作来实现的因而在协程屏蔽了 asyncio.CancelledError 时可能无法正常工作。 类似地,用户代码通常也不应调用 uncancel。 但是,在确实想要屏蔽 asyncio.CancelledError 的情况下,则还有必要调用 uncancel()
来完全移除撤销状态。
Reference
Python 异步编程入门 - 阮一峰的网络日志 (ruanyifeng.com)
协程与任务 — Python 3.13.1 文档
相关文章:
快速入门Python的异步库:asyncio
目录 异步 Python asyncio 1. async 关键字 2. await 关键字 3. asyncio.run() 4. asyncio.sleep() 5. 协程 程序执行流程 可以被等待的异步 协程 任务 Futures 任务 asyncio.create_task() await 和任务结果 Reference 异步 我们首先先来谈谈异步,…...
大美祖国-使用Java盘点那些在地名中出现最多的汉字
目录 前言 一、地名数据准备 1、全国地名数据 二、使用Java进行汉字统计 1、汉字数据统计 2、汉字分割统计 三、浅谈地名汉字名次及其意义 1、山、城、江、河 2、安、平、宁 3、地名中的方位 四、总结 前言 在中国这片古老而又年轻的土地上,地名不仅仅是地…...
华为OD机试E卷 --羊、狼、农夫过河--24年OD统一考试(Java JS Python C C++)
文章目录 题目描述输入描述输出描述用例题目解析JS算法源码Java算法源码python算法源码c算法源码c++算法源码题目描述 羊、狼、农夫都在岸边,当羊的数量小于狼的数量时,狼会攻击羊,农夫则会损失羊。农夫有一艘容量固定的船,能够承载固定数量的动物。 要求求出不损失羊情况…...
Java - WebSocket
一、WebSocket 1.1、WebSocket概念 WebSocket是一种协议,用于在Web应用程序和服务器之间建立实时、双向的通信连接。它通过一个单一的TCP连接提供了持久化连接,这使得Web应用程序可以更加实时地传递数据。WebSocket协议最初由W3C开发,并于2…...
JavaWeb开发(十五)实战-生鲜后台管理系统(二)注册、登录、记住密码
1. 生鲜后台管理系统-注册功能 1.1. 注册功能 (1)创建注册RegisterServlet,接收form表单中的参数。 (2)service创建一个userService处理业务逻辑。 (3)RegisterServlet将参数传递给ser…...
【深度学习】利用Java DL4J 训练金融投资组合模型
🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/literature?__c=1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编程,高并发设计,Springboot和微服务,熟悉Linux,ESXI虚拟化以及云原生Docker和K8s…...
【MySQL篇】事务的认识以及四大特性
何为事务? 事务(Transaction)是指一组操作的集合,这些操作要么全部执行成功,要么全部不执行。事务通常用于保证数据库的一致性、完整性和可靠性,确保数据的完整性与正确性。 有效避免部分执行࿰…...
CSS 网络安全字体
适用于 HTML 和 CSS 的最佳 Web 安全字体 下面列出了适用于 HTM L和 CSS 的最佳 Web 安全字体: Arial (sans-serif)Verdana (sans-serif)Helvetica (sans-serif)Tahoma (sans-serif)Trebuchet MS (sans-serif)Times New Roman (serif)Georgia (serif)Garamond (se…...
实战演示:利用ChatGPT高效撰写论文
在当今学术界,撰写论文是一项必不可少的技能。然而,许多研究人员和学生在写作过程中常常感到困惑和压力。幸运的是,人工智能的快速发展为我们提供了新的工具,其中ChatGPT便是一个优秀的选择。本文将通过易创AI创作平台,…...
显卡(Graphics Processing Unit,GPU)架构详细解读
显卡架构主要分为两大类:GPU 核心架构(也称为图形处理单元架构)和显卡的其他组件(如内存、控制器、输出接口等)。本篇文章将对显卡架构进行详细分析,重点介绍 GPU 核心架构、显卡计算单元、显存结构、显卡管…...
OpenCV相机标定与3D重建(63)校正图像的畸变函数undistort()的使用
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 转换图像以补偿镜头畸变。 该函数通过变换图像来补偿径向和切向镜头畸变。 此函数仅仅是 initUndistortRectifyMap(使用单位矩阵 R…...
人工智能-机器学习之多分类分析(项目实战二-鸢尾花的多分类分析)
Softmax回归听名字,依然好像是做回归任务的算法,但其实它是去做多分类任务的算法。 篮球比赛胜负是二分类,足球比赛胜平负就是多分类 识别手写数字0和1是二分类,识别手写数字0-9就是多分类 Softmax回归算法是一种用于多分类问题…...
【JDBC】数据库连接的艺术:深入解析数据库连接池、Apache-DBUtils与BasicDAO
文章目录 前言🌍 一.连接池❄️1. 传统获取Conntion问题分析❄️2. 数据库连接池❄️3.连接池之C3P0技术🍁3.1关键特性🍁3.2配置选项🍁3.3使用示例 ❄️4. 连接池之Druid技术🍁 4.1主要特性🍁 4.2 配置选项…...
【Envi遥感图像处理】006:影像融合(高光谱+多光谱)的方法
文章目录 一、图像融合概述二、加载数据三、图像融合操作四、结果比对五、高光谱与多光谱一、图像融合概述 图像融合是指将不同类型传感器的影像进行融合,既能使图向具有较高的空间分辨率,又具有多光谱的特性。 二、加载数据 三、图像融合操作 在ENvi中,图像融合使用的工具…...
C语言内存之旅:从静态到动态的跨越
大家好,这里是小编的博客频道 小编的博客:就爱学编程 很高兴在CSDN这个大家庭与大家相识,希望能在这里与大家共同进步,共同收获更好的自己!!! 本文目录 引言正文一 动态内存管理的必要性二 动态…...
Git本地搭建
Git本地搭建 (项目突然不给创建仓库了,为了方便管理项目只能自己本地搭建git服务) 为了在本地搭建Git环境并实现基本的Git操作,步骤如下: 安装Git软件 Windows:从Git官方网站下载并安装适用于Windows…...
电商|基于java的农业电商系统(源码+数据库+文档)
农业电商系统 目录 基于java的农业电商系统 一、前言 二、系统设计 三、系统功能设计 系统功能实现 前台: 后台: 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取: 博主介绍:✌️…...
c语言分支和循环
文章目录 前言 一、分支结构 if语句 switch语句 三目运算符 二、循环结构 while循环 do-while循环 for循环 循环嵌套 循环控制语句 总结 前言 分支和循环是C语言中非常重要的控制结…...
大象机器人发布首款穿戴式数据采集器myController S570,助力具身智能数据收集!
myController S570 具有较高的数据采集速度和远程控制能力,大大简化了人形机器人的编程。 myController S570 是一款可移动的轻量级外骨骼,具有 14 个关节、2 个操纵杆和 2 个按钮,它提供高数据采集速度,出色的兼容性,…...
【HarmonyOS NEXT】华为分享-碰一碰开发分享
关键词:鸿蒙、碰一碰、systemShare、harmonyShare、Share Kit 华为分享新推出碰一碰分享,支持用户通过手机碰一碰发起跨端分享,可实现传输图片、共享wifi等。我们只需调用系统 api 传入所需参数拉起对应分享卡片模板即可,无需对 U…...
基于python+Django+mysql鲜花水果销售商城网站系统设计与实现
博主介绍:黄菊华老师《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育、辅导。 所有项目都配有从入门到精通的基础知识视频课程ÿ…...
Linux C\C++方式下的文件I/O编程
【图书推荐】《Linux C与C一线开发实践(第2版)》_linux c与c一线开发实践pdf-CSDN博客 《Linux C与C一线开发实践(第2版)(Linux技术丛书)》(朱文伟,李建英)【摘要 书评 试读】- 京东图书 Lin…...
2025寒假备战蓝桥杯01---朴素二分查找的学习
文章目录 1.暴力方法的引入2.暴力解法的思考 与改进3.朴素二分查找的引入4.朴素二分查找的流程5.朴素二分查找的细节6.朴素二分查找的题目 1.暴力方法的引入 对于下面的这个有序的数据元素的组合,我们的暴力解法就是挨个进行遍历操作,一直找到和我们的这…...
AI时代:弯道超车的新思维与实践路径
大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的…...
HunyuanDiT代码笔记
HunyuanDiT 是由腾讯发布的文生图模型,适配中英双语。 在模型方面的改进,主要包括: transformer结构text encoderpositional encoding Improving Training Stability To stabilize training, we present three techniques: We add layer nor…...
C++: Dtrees:load(constg String filepath, const String nodeName)中nodeName参数含义
1. nodeName 的作用 当你保存模型时,整个决策树会被序列化到一个 XML 或 YAML 文件中。nodeName 是加载时指定的一个逻辑路径,用于从文件中找到某个节点或子结构,而不是存储在文件中的字段。如果你不指定 nodeName,OpenCV 默认会…...
项目练习:若依后台管理系统-后端服务开发步骤(springboot单节点版本)
文章目录 1、用Maven搭建项目脚手架,父子工程依赖。2、引入SpringBoot Web容器依赖3、引入Mybatisdruid依赖4、实现接口查询数据5、整合logback日志功能 1、用Maven搭建项目脚手架,父子工程依赖。 root模块的pom添加plugin配置 <build><plugins…...
Ubuntu安装docker
snap install docker # version 27.2.0, or apt install podman-docker # version 3.4.4ds1-1ubuntu1.22.04.2 apt install docker.io # version 24.0.7-0ubuntu2~22.04.1 我应该安装哪一个,部署企业级应用? 在部署企业级应用时,选择合适的容器化…...
windows11下 podman-desktop 复制插件文件 到 RabbitMQ 容器内,并启用
目的: 刚启用的 RabbitMQ 容器,发现没有rabbitmq_delayed_message_exchange 插件,开始手动安装 官网 https://www.rabbitmq.com/community-plugins 或 https://github.com/rabbitmq/rabbitmq-delayed-message-exchange 下载rabbitmq_delay…...
Quickstart C++ with cmake, visualstudio | CPP
本文属于 C 系列文章,下一篇文章见 Quick get started with vcpkg, windows visual studio | CPP 目录 cmake-visualstudio-quickstartDepsConfigureBuild with CLILINKS cmake-visualstudio-quickstart https://github.com/hailiang-wang/cmake-visualstudio-quic…...
惊叹数据结构之美,品味排序算法之妙:对四大排序的详细介绍
大家好,这里是小编的博客频道 小编的博客:就爱学编程 很高兴在CSDN这个大家庭与大家相识,希望能在这里与大家共同进步,共同收获更好的自己!!! 本文目录 正文一、冒泡排序(Bubble Sor…...
机器学习——什么是代价函数? 下
“上次课讲了机器学习的模型表示,讲了一个线性模型的例子,那怎样在可能的拟合直线里选择一条最合适的呢?有没有数学的方法让这个直线合适还是不合适变得可以量化呢?这就要说代价函数了。” 本次课前半段内容非常简单,带领我们一起复习初中平面几何的知识,后半段给出了代价…...
Ubuntu本地部署网站
目录 1.介绍 2.安装apache 3.网页升级 1.介绍 网站其实就相当于一个文件夹,用域名访问一个网页,就相当于访问了一台电脑的某一个文件夹,在网页中看见的视频,视频和音乐其实就是文件夹里面的文件。为什么网页看起来不像电脑文件夹…...
hydra破解密码
hydra九头蛇是常用的密码破解工具 1、破解centos ssh密码 hydra -l root -P password.txt ssh://192.168.1.107:2222 hydra -l root -P password.txt -s 2222 192.168.1.107 ssh2、破解ftp hydra -l allen -P e:\aa.txt ftp://127.0.0.1 hydra -l allen -P e:\aa.txt ftp:…...
华为OD机试E卷 --字符串变换最小字符串 --24年OD统一考试(Java JS Python C C++)
文章目录 题目描述输入描述输出描述用例题目解析JS算法源码java算法源码python算法源码c算法源码c算法源码 题目描述 给定一个字符串s,最多只能进行一次变换,返回变换后能得到的最小字符串(按照字典序进行比较)。 变换规则&#…...
用户中心项目教程(二)---umi3的使用出现的错误
目录 1.情况的说明 2.遇到的问题 1)第一个问题-关于npx的使用 2)第二个问题--unsupport问题 3)第三个收获--nodejs安装问题 4)第四个收获---nvm下载问题 5)第五个问题--尚未解决的问题 3.个人总结 1.情况的说明…...
具身智能新突破!Physical Intelligence推出机器人动作tokenizer,训练提速5倍
具身智能,是人工智能(AI)行业的下一个浪潮。如何有效训练 Transformers 模型来控制具身机器人,是当前亟需要解决的难题,尤其是对于更复杂、需要精确和高频控制的精巧技能,现有的视觉-语言-动作(…...
Unity 学习指南与资料分享
Unity学习资料 Unity学习资料 Unity学习资料 Unity 作为一款强大的跨平台游戏开发引擎,在游戏开发及实时 3D 内容创作领域占据着重要地位。它功能丰富、易于上手,支持多平台发布,为开发者提供了广阔的创作空间。下面为你带来全面的 Unity 学…...
react什么时候用箭头函数,什么时候不需要
最近从vue项目转到react,太久没写了。遇到了一些卡住的问题,记录一下。 在 JavaScript 和 React 开发中,箭头函数(Arrow Functions)的使用主要取决于上下文、代码简洁性和特定需求。以下是关于何时使用箭头函数以及何时…...
软考中级复习篇章:数据结构部分的复习
软考中级快速通过篇章:数据结构部分的复习 一、引言 在软考中级的备考过程中,数据结构是极为重要的一个部分。它不仅是计算机科学的基础,也是软考中考查的重点知识领域。扎实掌握数据结构相关内容,对于顺利通过软考中级考试起着…...
【Vim Masterclass 笔记22】S09L40 + L41:同步练习11:Vim 的配置与 vimrc 文件的相关操作(含点评课内容)
文章目录 S09L40 Exercise 11 - Vim Settings and the Vimrc File1 训练目标2 操作指令2.1. 打开 vimrc-sample 文件2.2. 尝试各种选项与设置2.3. 将更改内容保存到 vimrc-sample 文件2.4. 将文件 vimrc-sample 的内容复制到寄存器2.5. 创建专属 vimrc 文件2.6. 对于 Mac、Linu…...
Spring Boot 整合 PageHelper 实现分页功能
在开发 Web 应用时,分页功能几乎是必不可少的。Spring Boot 提供了强大的功能来简化开发,而 PageHelper 则是一个优秀的 MyBatis 分页插件,可以极大地简化分页查询的代码。本文将介绍如何在 Spring Boot 项目中整合 PageHelper,并…...
Redis和MongoDB的区别
前言 在项目选型阶段,MongoDB被选中主要是基于其处理大规模数据集的能力,而当时并未深入探讨其他替代方案。此前,Redis被用于管理少量但访问频繁的热数据。目前,项目采用MongoDB存储百万级数据,预计未来数据量将增长至…...
Java基础(2)
博客:深入理解浮点型数据、计算机视觉信息存储与类型转换 四、浮点型数据 在编程语言中,浮点型数据主要包括float(单精度)和double(双精度)。计算机默认使用double类型存储小数,这会引发一些特…...
D3.js及实例应用
文章目录 D3.jsd3.js 应用实例图标展示点击选择拖拉拽应用 D3.js D3.js是一个功能强大的JavaScript库,除了图标展示,还能实现多种类型的交互效果: 数据可视化交互 动态更新图表:根据用户操作(如点击按钮、选择下拉菜…...
管理权限特权
管理权限 Oracle 用户权限分为两种类型: 系统权限:允许用户在数据库中执行特定的操作。 对象权限:允许用户访问和操作特定的对象。 系统权限 Oracle 数据库中有超过100种不同的系统权限。权限中的 “ANY” 关键字表示用户在任何模式&#x…...
基于海思soc的智能产品开发(视频的后续开发)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 前面我们讨论了camera,也讨论了屏幕驱动,这些都是基础的部分。关键是,我们拿到了这些视频数据之后,…...
为什么相关性不是因果关系?人工智能中的因果推理探秘
目录 一、背景 (一)聚焦当下人工智能 (二)基于关联框架的人工智能 (三)基于因果框架的人工智能 二、因果推理的基本理论 (一)因果推理基本范式:因果模型࿰…...
【QT】已解决:Qt4.11.0无法使用MSVC编译器问题
目录 一、背景 1.本机环境 2.问题描述 3.问题解决前后对比图 二、详细操作 1.下载项目二所需qt环境 2.解决思路 3.安装VS2017 4.安装MSVC调试器 5.打开qtCreator查看编译器 5.编译运行项目二 三、参考 一、背景 1.本机环境 windows11 qtCreator4.11.0 minGW 64位…...
python如何解析word文件格式(.docx)
python如何解析word文件格式(.docx) .docx文件遵从开源的“Office Open XML标准”,这意味着我们能用python的文本操作对它进行操作(实际上PPT和Excel也是)。而且这并不是重复造轮子,因为市面上操作.docx的…...