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

Python 异步编程的秘密武器:Asyncio

python编程中,异步编程是一个重要概念。它允许我们在等待某些操作(如网络请求或文件读写)时,不阻塞程序的其他部分运行。

在 Python 中,asyncio 是实现异步编程的强大工具。今天,我们将一同探索 asyncio 的基本概念、工作原理,并通过一些有趣的案例来加深理解。

图片

什么是异步编程?

异步编程是一种编程范式,它允许程序在执行某些操作(如网络请求或文件读写)时,不会阻塞整个程序的运行。简单来说,当你在等某个任务完成时,你可以去做其他事情,而不是一味地等待。

阻塞与非阻塞

  • 阻塞:程序在执行某个操作时会停下来,直到操作完成。

  • 非阻塞:程序可以继续执行其他操作,而不必等待某个操作完成。

想象一下,在厨房里做饭,你可以同时煮水、切菜和准备食材,而不是一件一件地完成。

asyncio:Python的异步编程库

asyncio是Python内置的异步编程库,它使得编写异步代码变得简单而高效。通过使用asyncawait关键字,开发者可以轻松实现异步操作。

核心概念

  • 协程:使用async def定义的函数,能够在执行过程中被挂起,并在需要的时候恢复执行。

  • 事件循环asyncio的核心,负责调度和管理协程的执行。

  • 任务:协程的封装体,事件循环可以用来执行这些任务。

使用asyncio的基本步骤

1 创建协程

首先,我们定义一个简单的协程,它模拟一个耗时的操作:

import asyncioasync def say_hello():print("Hello")await asyncio.sleep(1)  # 模拟耗时操作print("World")

2 事件循环

接下来,我们需要创建一个事件循环来运行这个协程:

async def main():await say_hello()# 运行事件循环
asyncio.run(main())

实战案例:并发HTTP请求

我们可以使用asyncioaiohttp库来进行并发的HTTP请求。下面的代码展示了如何同时获取多个网页的内容。

1 安装aiohttp

首先,确保你已经安装了aiohttp库:

pip install aiohttp

2 实现并发请求

下面是一个获取多个网页内容的示例:

import asyncio
import aiohttpasync def fetch(url):async with aiohttp.ClientSession() as session:async with session.get(url) as response:return await response.text()async def main(urls):tasks = [fetch(url) for url in urls]results = await asyncio.gather(*tasks)for result in results:print(f"Fetched {len(result)} characters")# 示例网址
urls = ['https://www.example.com','https://www.python.org','https://www.openai.com'
]# 运行事件循环
asyncio.run(main(urls))

3 解释代码

  • fetch协程:接收URL,使用aiohttp进行异步GET请求。

  • main协程:创建任务列表并使用asyncio.gather并发执行所有请求。

异步编程在现代Python开发中至关重要,asyncio库使得编写异步代码变得简单高效。通过理解协程、事件循环和任务的概念,你可以在自己的项目中利用异步编程提升性能。

 文末福利

最后,如果你对 Python 感兴趣,想要有更深入的了解,可以试试我整理的这一份全套的Python学习资料,【点击这里】免费领取!

包括:Python激活码+安装包、Python web开发,Python爬虫,Python数据分析,人工智能、自动化办公等学习教程。

也可以微信扫描下方CSDN官方认证二维码免费获取【保证100%免费】

 

① Python所有方向的学习路线图,清楚各个方向要学什么东西
② 100多节Python课程视频,涵盖必备基础、爬虫和数据分析
③ 100多个Python实战案例,学习不再是只会理论
④ 华为出品独家Python漫画教程,手机也能学习

相关文章:

Python 异步编程的秘密武器:Asyncio

python编程中,异步编程是一个重要概念。它允许我们在等待某些操作(如网络请求或文件读写)时,不阻塞程序的其他部分运行。 在 Python 中,asyncio 是实现异步编程的强大工具。今天,我们将一同探索 asyncio 的…...

10年计算机考研408-计算机网络

【题33】下列选项中,不属于网络体系结构所描述的内容是() A.网络的层次 B.每一层使用的协议 C.协议的内部实现细节 D.每一层必须完成的功能 解析: 本题考查的是网络体系结构相关的概念。 图1描述了网络的7层架构以及每一层所要完成…...

深信服校招面试总结

许久没有更新博客,这两个月里发生的事情有些多。最近稍微稳定下来了,应该可以重新开始吧。 背景 首先感觉自己的笔试做的还行,除了第三个编程题没做出来,其他的应该都做出来了。当时忘记并查集的路径压缩怎么写了,加上…...

【LeetCode热题100】模拟

这篇博客记录了模拟相关的题目&#xff0c;也就是按照题目的描述写代码&#xff0c;很锻炼代码实现能力&#xff0c;包括了替换所有的问号、Z字形变换、外观数列、数青蛙4道题。 class Solution { public:string modifyString(string s) {int n s.size();for(int i 0 ; i <…...

如何在Chrome最新浏览器中调用ActiveX控件?

小编最近登陆工商银行网上银行&#xff0c;发现工商银行的个人网银网页&#xff0c;由于使用了ActiveX安全控件&#xff0c;导致不能用高版本Chrome浏览器打开&#xff0c;目前只有使用IE或基于IE内核的浏览器才能正常登录网上银行&#xff0c;而IE已经彻底停止更新了&#xff…...

一款好用的远程连接工具:MobaXterm

在日常工作中&#xff0c;作为开发者或运维人员&#xff0c;你是否经常需要远程连接服务器进行调试和管理&#xff1f;传统的SSH工具常常不够灵活&#xff0c;操作繁琐&#xff0c;无法满足日益复杂的工作需求。而MobaXterm的出现&#xff0c;带来了远程连接工具的全新体验。它…...

Spring Boot使用配置方式整合MyBatis

文章目录 一、实战目标二、步骤概览1. 创建部门映射器接口2. 创建映射器配置文件3. 配置全局映射器4. 测试映射器接口 三、详细步骤1、创建部门映射器接口2、创建映射器配置文件3、配置全局映射器4、测试映射器接口 四、结语 一、实战目标 在本实战课程中&#xff0c;我们将学…...

HarmonyOS第一课-应用程序框架基础习题答案

声明&#xff1a;本题库为最新的HarmonyOS第一课的学习题库&#xff0c;仅供参考学习&#xff01; 一、判断题 1. 在基于Stage模型开发的应用项目中都存在一个app.json5配置文件、以及一个或多个module.json5配置文件。&#xff08;正确&#xff09; 正确(True) 错误(False) -…...

滚雪球学SpringCloud[10.2讲]:微服务项目的性能优化与调优

全文目录: 前言性能优化与调优概述性能优化的核心目标常见的性能瓶颈来源 性能瓶颈分析与调优策略1. 服务间通信优化优化策略&#xff1a; 2. 数据库优化优化策略&#xff1a; 3. 线程池优化优化策略&#xff1a; 4. 缓存优化优化策略&#xff1a; 常见问题的排查与解决1. 慢查…...

EasyExcel将数据库里面的数据生成excel文件

EasyExcel官方文档 1.在model模块导入依赖 <!-- 生成报表--> <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>4.0.3</version> </dependency> 2.修饰实体类 package…...

【YOLO学习】YOLOv1详解

文章目录 1. 概述2. 算法流程3. 网络结构4. 损失函数 1. 概述 1. YOLO 的全称是 You Only Look Once: Unified, Real-Time Object Detection。YOLOv1 的核心思想就是利用整张图作为网络的输入&#xff0c;直接在输出层回归 bounding box 的位置和 bounding box 所属的类别。简单…...

HarmonyOS应用开发(组件库)--组件模块化开发、工具包、设计模式(持续更新)

致力于&#xff0c;UI开发拿来即用&#xff0c;提高开发效率 常量格式枚举enum格式正则表达式...手机号校验...邮箱校验 文件判断文件是否存在 网络下载下载图片从沙箱中图片转为Base64格式从资源文件中读取图片转Base64 组件输入框...矩形输入框...输入框堆叠效果&#xff08;…...

python测试开发---前后端交互Axios

Axios 是一个基于 Promise 的 HTTP 客户端&#xff0c;常用于浏览器和 Node.js 中发送 HTTP 请求。它封装了 XMLHttpRequest 和 Node.js 的 http 模块&#xff0c;使得处理网络请求更加简单和直观&#xff0c;尤其适合处理异步请求。以下是 Axios 的基础概念和使用方法&#xf…...

删除视频最后几帧 剪切视频

删除视频最后几帧 剪切视频 remove_last.py import subprocess def remove_last_frame(input_file, output_file, frame_rate):command_duration [ffprobe,-v, error,-show_entries, formatduration,-of, defaultnoprint_wrappers1:nokey1,input_file]try:total_duration fl…...

SSM框架学习(四、SpringMVC实战:构建高效表述层框架)

目录 一、SpringMVC简介和体验 1.介绍 2.主要作用 3.核心组件和调用流程理解 4.快速体验 二、SpringMVC接收数据 1.访问路径设置 &#xff08;1&#xff09;精准路径匹配 &#xff08;2&#xff09;模糊路径匹配 &#xff08;3&#xff09;类和方法上添加 RequestMapp…...

戴尔笔记本电脑——重装系统

说明&#xff1a;我的电脑是戴尔G3笔记本电脑。 第一步&#xff1a;按照正常的装系统步骤&#xff0c;配置并进入U盘的PE系统 如果进入PE系统&#xff0c;一部分的硬盘找不到&#xff0c;解决办法&#xff1a;U盘PE系统——出现部分硬盘找不到的解决办法 第二步&#xff1a;磁…...

领夹麦克风哪个品牌音质最好,主播一般用什么麦克风

在这个信息爆炸的时代&#xff0c;清晰的声音传达显得尤为重要。无论是激情澎湃的演讲&#xff0c;还是温馨动人的访谈&#xff0c;一款优质的无线领夹麦克风都能让声音清晰的传播。但市场上产品繁多&#xff0c;如何挑选出性价比高、性能卓越的无线领夹麦克风呢&#xff1f;本…...

华为静态路由(route-static)

静态路由的组成 在华为路由器中&#xff0c;使用ip route-static命令配置静态路由。 一条静态路由主要包含以下要素&#xff1a; 目的地址&#xff1a;数据包要到达的目标IP地址 子网掩码&#xff1a;用于指定目的地址的网络部分和主机部分 下一跳地址&#xff08;可选&#…...

Focalboard开源项目管理系统本地Windows部署与远程访问协同办公

文章目录 前言1. 使用Docker本地部署Focalboard1.1 在Windows中安装 Docker1.2 使用Docker部署Focalboard 2. 安装Cpolar内网穿透工具3. 实现公网访问Focalboard4. 固定Focalboard公网地址 &#x1f4a1; 推荐 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&am…...

Java如何操作Elasticsearch

目录 前言 Procuct实体类 一、操作索引 二、操作文档 三、查询文档 四、复杂条件查询 五、分页查询 六、结果排序 本文文章介绍的是通过template的方法操作elasticsearch&#xff0c;他的话直接本地注入使用就行&#xff0c;repository方法还需要实现接口&#xff0c;所…...

cpu路、核、线程、主频、缓存

路&#xff1a;主板插口实际插入的 CPU 个数&#xff0c;也可以理解为主板上支持的CPU的数量。每个CPU插槽可以插入一个物理处理器芯片。例如&#xff0c;一台服务器可能有2路或4路插槽&#xff0c;这意味着它最多可以安装2个或4个物理处理器。 核&#xff1a;单块 CPU 上面能…...

【AI算法岗面试八股面经【超全整理】——深度学习】

AI算法岗面试八股面经【超全整理】 概率论【AI算法岗面试八股面经【超全整理】——概率论】信息论【AI算法岗面试八股面经【超全整理】——信息论】机器学习【AI算法岗面试八股面经【超全整理】——机器学习】深度学习【AI算法岗面试八股面经【超全整理】——深度学习】NLP【A…...

STL——map和set【map和set的介绍和使用】【multimap和multiset】

目录 map和set1.关联式容器2.键值对3.树形结构的关联式容器3.1set3.1.1set的介绍3.1.2set的使用3.1.2.1set的模版参数列表3.1.2.2set的构造3.1.2.3set的迭代器3.1.2.4set基本接口的使用3.1.2.5set使用案例 3.2map3.2.1map介绍3.2.2map的使用3.2.2.1map的构造3.2.2.2map的迭代器…...

【笔记】神领物流配置本地hosts无法访问域名(排除DNS 排除文件编码问题)已解决

第一次看着文档准备项目 踩坑不少 一遇到问题总是想着先自己解决 其实文档里就有解决方法 看文字总是喜欢跳过 导入虚拟机的时候忘记了给它设置ip地址 按照文档来就好了 配置完之后立刻就可以通过域名访问了 以防万一写一个本地hosts文件的路径在这里 通常来说都是&#xff…...

Java | Leetcode Java题解之第424题替换后的最长重复字符

题目&#xff1a; 题解&#xff1a; public class Solution {public int characterReplacement(String s, int k) {int len s.length();if (len < 2) {return len;}char[] charArray s.toCharArray();int left 0;int right 0;int res 0;int maxCount 0;int[] freq n…...

Xcode 16 Pod init 报错

pod init failed in Xcode 16 Issue #12583 CocoaPods/CocoaPods GitHub 根据你提供的步骤&#xff0c;以下是详细的操作指南来解决 CocoaPods 的问题&#xff1a; ### 步骤 1&#xff1a;在 Xcode 中转换项目文件夹为组 1. 打开你的 Xcode 项目。 2. 在左侧的项目导航器…...

【数据结构】Java的HashMap 和 HashSet 大全笔记,写算法用到的时候翻一下,百度都省了!(实践篇)

本篇会加入个人的所谓鱼式疯言 ❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言 而是理解过并总结出来通俗易懂的大白话, 小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的. &#x1f92d;&#x1f92d;&#x1f92d;可能说的不是那么严谨.但小编初心是能让更多人…...

Docker 教程:如何查看容器的最后 300 行实时日志

Docker 教程&#xff1a;如何查看容器的最后 300 行实时日志 文章目录 Docker 教程&#xff1a;如何查看容器的最后 300 行实时日志Docker 日志简介查看容器日志的基本命令查看最后 300 行实时日志的具体命令参数解释 实际案例演示示例输出 常见问题解答如何退出实时日志的查看…...

Qwen2-VL论文阅读笔记

第1章介绍 论文亮点&#xff1a; 1、 the Naive Dynamic Resolution mechanism 2、Multimodal Rotary Position Embedding (M-RoPE) 2D Rotary Position Embedding 3、统一图片和视频的处理范式、增i强视觉感知能力 4、LVLMs的scaling laws&#xff1a;2B、8B、72B 5、 dynamic…...

APScheduler、Django实现定时任务,以及任务动态操作

环境&#xff1a;Windows 11、python 3.12.3、Django 4.2.11、 APScheduler 3.10.4 背景&#xff1a;工作需要使用且用法较为复杂&#xff0c;各种功能基本都使用了 事件&#xff1a;20240920 说明&#xff1a;记录&#xff0c;方便后期自己查找 1、搭建基础环境 文件结构图…...