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

【Python】Python异步编程

Python 异步编程

异步编程

在这里插入图片描述

异步编程是一种编程范式,通过非阻塞的方式执行任务,允许程序在等待某些操作(如I/O操作、网络请求、数据库查询等)完成时,继续执行其他任务。这与同步编程(或阻塞编程)形成对比,后者在等待操作完成时会阻塞执行流程,直到任务完成才继续执行。

以下是异步编程的一些关键概念和特点:

  1. 非阻塞执行: 在异步编程中,当一个任务需要等待某些操作完成时(例如等待网络请求的响应),程序不会停止执行其他任务,而是会继续处理其他任务。
  2. 回调函数: 异步编程经常使用回调函数,在等待操作完成后,这些回调函数会被执行,以处理操作的结果。回调函数允许程序在任务完成后继续执行相应的代码。
  3. Promise和Future: 许多异步编程模型使用Promise或Future对象来表示将来某个时间点会完成的操作结果。Promise和Future提供了一种管理异步操作结果的方法,允许在结果可用时执行相应的代码。
  4. 协程: 协程是异步编程中常用的一种构造,允许函数在等待操作完成时暂停执行,并在操作完成后恢复执行。Python中的asyncawait关键字用于定义和控制协程。
  5. 事件循环: 异步编程依赖于事件循环来管理和调度异步任务。事件循环会不断检查和执行已完成的任务,并在任务完成后触发相应的回调或恢复协程的执行。

说明:异步并不简单的等于并发,更精准的表述应该是并发,也即多个任务在同一时间段内交替运行,而不是同时运行。

asyncio 模块

asyncio 模块是用来编写 并发 代码的库,使用 async/await 语法。

asyncio 模块最大特点就是,只存在一个线程,与 JavaScript 中的 async/await 一样。

asyncio 模块在单线程上启动一个事件循环(event loop),时刻监听着新进入循环的事件,对事件进行处理,并不断地重复这个过程,直到异步任务结束。

在这里插入图片描述

asyncio 模块示例

代码示例

import asyncioasync def count():print("Start")await asyncio.sleep(1)print("End")async def main():# gather()函数的作用是收集,能够按照协程的执行顺序保存对应协程的执行结果。await asyncio.gather(count(), count(), count())# run()通常用于脚本或应用程序的入口点,用于启动异步操作。
asyncio.run(main())

执行示例

在这里插入图片描述

也即,异步操作能够在单线程的情况下,对协程依次执行,遇到阻塞的情况就会等待去执行下一个协程,并对协程的执行结果进行收集。

FastApi 框架

FastApi 是一个用于构建 API 的现代、快速(高性能)的 web 框架,使用 Python 并基于标准的 Python 类型提示。

FastApi 能够支持异步编程的 async/await 语法。

如下是一个简单的代码示例,用户点餐,提供了可乐和汉堡,在制作汉堡的同时,餐厅人员也在制作可乐,而不是等待汉堡完成后再去制作可乐,如下是这个过程的模拟。

import asyncio
from fastapi import FastAPI
from datetime import datetimeapp = FastAPI()async def get_coca(number: int):start = datetime.now().strftime("%Y-%m-%d %H:%M:%S")await asyncio.sleep(number)end = datetime.now().strftime("%Y-%m-%d %H:%M:%S")return {"coca": number, "start": start, "end": end}async def get_burgers(number: int):start = datetime.now().strftime("%Y-%m-%d %H:%M:%S")await asyncio.sleep(number)end = datetime.now().strftime("%Y-%m-%d %H:%M:%S")return {"burgers": number, "start": start, "end": end}# 路由地址定义
@app.get("/orders")
async def read_orders(burgers: int = 0, coca: int = 0, consumer: str = ""):# 这里收集协程的处理结果result = await asyncio.gather(get_burgers(burgers), get_coca(coca))return {"consumer": consumer, "order": result}

接口测试结果:

在这里插入图片描述

如上就是 Python 异步编程的简单示例,主要是相关概念以及模块的使用介绍,如果有需要可以查询 asyncio 模块的官方文档,或者是 FastAPI 的官方文档,尤其是 FastAPI 官网关于 async/await 的章节使用汉堡做了详细的讲述。

参考资料:

[1] 并发 async / await https://fastapi.tiangolo.com/zh/async/#_4

[2] Python异步编程入门 https://www.ruanyifeng.com/blog/2019/11/python-asyncio.html

[3] asyncio官方文档 https://docs.python.org/3/library/asyncio.html

相关文章:

【Python】Python异步编程

Python 异步编程 异步编程 异步编程是一种编程范式,通过非阻塞的方式执行任务,允许程序在等待某些操作(如I/O操作、网络请求、数据库查询等)完成时,继续执行其他任务。这与同步编程(或阻塞编程&#xff09…...

pytorch笔记:自动混合精度(AMP)

1 理论部分 1.1 FP16 VS FP32 FP32具有八个指数位和23个小数位,而FP16具有五个指数位和十个小数位Tensor内核支持混合精度数学,即输入为半精度(FP16),输出为全精度(FP32) 1.1.1 使用FP16的优缺…...

R语言ggplot2包绘制世界地图

数据和代码获取&#xff1a;请查看主页个人信息&#xff01;&#xff01;&#xff01; 1. 数据读取与处理 首先&#xff0c;从CSV文件中读取数据&#xff0c;并计算各国每日收入的平均签证成本。 library(tidyverse) ​ df <- read_csv("df.csv") %>% group_…...

【Linux】Linux的权限_1

文章目录 三、权限1. shell外壳2. Linux的用户3. Linux权限管理文件访问者的分类文件类型和访问权限 未完待续 三、权限 1. shell外壳 为什么要使用shell外壳 由于用户不擅长直接与操作系统直接接触和操作系统的易用程度、安全性考虑&#xff0c;用户不能直接访问操作系统。 什…...

日语_远程办公常用日语单词

基本词汇 リモートワーク&#xff08;Rimōto Wāku&#xff09;&#xff1a;远程工作テレワーク&#xff08;Terewāku&#xff09;&#xff1a;远程工作&#xff08;Telework&#xff09;在宅勤務&#xff08;ざいたくきんむ&#xff0c;Zaitaku Kinmu&#xff09;&#xff…...

MTK 平台项目security boot 开启/关闭 及 系统签名流程

以 https://online.mediatek.com/FAQ#/SW/FAQ26691 为基础做如下记录以做备忘&#xff1a; How to Enable/Disable Secure Boot for Security 3.0: 1、 How to Enable Path Enable Preloader /vendor/mediatek/proprietary/bootable/bootloader/preloader/custom/{…...

JDBC连接MySQL

目录 1.数据库编程的必备条件 2.Java的数据库编程JDBC 3.JDBC的工作原理 4.第三方库connector的下载和导包 5.JDBC的使用 使用步骤 &#xff08;1&#xff09;创建数据源对象DataSource &#xff08;2&#xff09;给对象设置必要的属性 &#xff08;3&#xff09;和数据…...

【Qt】【模型视图架构】 在项目视图中启用拖放

文章目录 1. 在便捷类中启用拖放2. 在模型/视图类中启用拖放 模型/视图框架支持Qt的拖放应用。 列表、表格和树中的项目可以在视图中被拖拽&#xff0c;数据作为MIME编码的数据被导入和导出。标准视图可以自动支持内部的拖放。 默认视图的拖放功能并没有被启用&#xff0c;如果…...

B端产品无爆款,说有的都是忽悠和外行!

前言&#xff1a;网上经常有人讲运营&#xff0c;把C端那一套硬搬到B端&#xff0c;讲的自我陶醉&#xff0c;稍微有点常识的人就知道不能这么玩。 一、什么是B端和C端 B端&#xff08;Business-to-Business&#xff09;是指面向企业客户的市场和产品。B端产品或服务主要是为…...

腾讯云的身份证核验,找不到这个类

文件上传功能在许多Web应用程序中是非常常见的需求之一。然而&#xff0c;由于文件上传存在安全风险&#xff0c;保护用户上传的文件的安全性&#xff0c;以及防止黑客利用上传功能进行攻击是非常重要的。在本文中&#xff0c;我们将讨论一些常见的安全漏洞&#xff0c;并提供一…...

vue3 vue-draggable-next 实现拖拽穿梭框效果

一、vue3 vue-draggable-next 实现拖拽穿梭框效果 <template> <div> <h2>列表 1</h2> <draggable v-model"list1" group"items" tag"transition-group" end"onDragEnd"> <div v-for"(item…...

FreeRTOS【16】直达任务通知使用

1.开发背景 直达任务通知&#xff0c;FreeRTOS 的线程任务提供的接口&#xff0c;可以用作线程唤醒&#xff0c;或者是传递数据&#xff0c;因为是基于线程本身的操作&#xff0c;是轻量级&#xff0c;速度响应更快&#xff0c;适合小内存芯片使用。 事实上本人使用得比较少&am…...

关于软件<PDF文档管理系统V1.0>的介绍

<PDF文档管理系统V1.0>&#xff08;下载地址在最下面&#xff09;是我在2023年发布的<知识辅助系统>的改善以及重新开发版本&#xff0c;软件在重新开发提供了<知识辅助系统>的所有功能的基础上&#xff0c;添加了一些新的功能。软件尽量提供简单、实用的功能…...

Java面试题-Tomcat初级面试题

Tomcat是什么&#xff1f;请简述它的主要功能。 Tomcat是一个开源的Web应用服务器&#xff0c;由Apache软件基金会开发。它是一个实现了Java Servlet和JavaServer Pages&#xff08;JSP&#xff09;技术的容器&#xff0c;用于处理客户端的请求并返回响应。Tomcat的主要功能如…...

红队内网攻防渗透:内网渗透之windows内网权限提升技术:数据库篇

红队内网攻防渗透 1. 内网权限提升技术1.1 数据库权限提升技术1.1.1 数据库提权流程1.1.1.1 先获取到数据库用户密码1.1.1.2 利用数据库提权工具进行连接1.1.1.3 利用建立代理解决不支持外联1.1.1.4 利用数据库提权的条件及技术1.1.2 Web到Win-数据库提权-MSSQL1.1.3 Web到Win-…...

rust嵌入式开发之总结

我们用rust开发的新版产品刚刚交付&#xff0c;已经在海上安装测试完毕并顺利投产。终于松了口气&#xff0c;同时也有时间和精力来做个全面的总结了。 这个产品&#xff0c;目前差不多有三版&#xff1a; 第一个版本是用crt-thread写的&#xff0c;投产后出了一个内存泄露的…...

【制作100个unity游戏之27】使用unity复刻经典游戏《植物大战僵尸》,制作属于自己的植物大战僵尸随机版和杂交版6(附带项目源码)

最终效果 系列导航 文章目录 最终效果系列导航前言方法一、使用excel配置表excel转txt文本读取txt数据按配置信息生成僵尸 方法二、使用ScriptableObject 配置关卡信息源码结束语 前言 本节主要是推荐两种实现配置关卡信息&#xff0c;并按表生成僵尸和关卡波次 方法一、使用…...

回溯算法指组合总和

题目&#xff1a; 找出所有相加之和为 n 的 k 个数的组合&#xff0c;且满足下列条件&#xff1a; 只使用数字1到9每个数字 最多使用一次 返回 所有可能的有效组合的列表 。该列表不能包含相同的组合两次&#xff0c;组合可以以任何顺序返回。 思路&#xff1a; 这种问题…...

java-stream转换map key重复报错解决小记

解决key重复问题 在用stream转成map过程中会有key重复的隐患&#xff0c;如果数据没重复还好&#xff0c;如果重复了会提示 java.lang.IllegalStateException: Duplicate key 8753444332651at java.util.stream.Collectors.lambda$throwingMerger$0(Collectors.java:133)at ja…...

王春城 | 如何解决精益转型过程中的信任问题?

实践证明&#xff0c;精益转型不仅仅是技术和管理方法的更新&#xff0c;更是一场深刻的文化变革。在这个过程中&#xff0c;涉及到多个部门、多个层级的协同合作&#xff0c;需要团队成员之间的深度沟通和高度信任。如果缺乏信任&#xff0c;团队成员之间就会产生隔阂和抵触情…...

【AI Daily】Arxiv论文研读Top5 | 2026-05-23

&#x1f4da; 每日学习汇总 | 2026-05-23&#xff08;周6&#xff09; &#x1f4ca; 今日概览 今日&#xff1a;周6&#xff0c;午读检索分类&#xff1a;cs.AI / q-bio.NC / cs.HC关键词&#xff1a;cognitive science behavioral AI alignment&#x1f525; 五篇精读速报 ①…...

告别抢票焦虑:大麦网自动抢票系统终极使用指南

告别抢票焦虑&#xff1a;大麦网自动抢票系统终极使用指南 【免费下载链接】ticket-purchase 大麦自动抢票&#xff0c;支持人员、城市、日期场次、价格选择 项目地址: https://gitcode.com/GitHub_Trending/ti/ticket-purchase 还在为抢不到心仪演出门票而烦恼吗&#…...

从仿真曲线到实际性能:手把手教你用IPKISS分析MZI Lattice Filter的插损与带宽

从仿真曲线到实际性能&#xff1a;手把手教你用IPKISS分析MZI Lattice Filter的插损与带宽 在光子集成电路设计中&#xff0c;仿真结果往往只是第一步。真正考验工程师功力的&#xff0c;是如何从这些曲线中提取出有工程价值的性能指标。本文将带您深入解读MZI Lattice Filter的…...

Beyond Compare 5密钥生成器:从评估到期到永久授权的完整解决方案

Beyond Compare 5密钥生成器&#xff1a;从评估到期到永久授权的完整解决方案 【免费下载链接】BCompare_Keygen Keygen for BCompare 5 项目地址: https://gitcode.com/gh_mirrors/bc/BCompare_Keygen 你是否在使用Beyond Compare 5进行文件对比时&#xff0c;遇到了30…...

昇腾CANN的算子“零件厂“:catlass仓库到底在生产什么

如果把昇腾NPU上的大模型算子比作一辆汽车&#xff0c;FlashAttention是发动机&#xff0c;RMSNorm是刹车片&#xff0c;RoPE是方向盘——那catlass是什么&#xff1f;是生产这些零件的模具和机床。 第一次接触昇腾CANN生态的时候&#xff0c;很容易忽略catlass。它不像ops-tr…...

华为员工职业发展手册

导读&#xff1a;这份华为员工职业发展手册&#xff0c;围绕员工入职、成长、晋升与激励构建了完整的职业发展体系&#xff0c;核心是明确企业、管理者与员工三方责任&#xff0c;搭建多元发展通道&#xff0c;助力员工与企业共成长。关注公众号&#xff1a;【互联互通社区】&a…...

避坑指南:Gurobi在MATLAB中配置成功后,为什么optimize函数求解结果不对?

Gurobi与MATLAB联合作战&#xff1a;当optimize函数结果异常时的全维度排错手册 当你终于完成了Gurobi的安装配置&#xff0c;看到yalmiptest显示"Found"时&#xff0c;那种成就感就像调试通过了第一个"Hello World"。但现实很快给你上了一课——optimize函…...

HTTPS明文调试实战:SSLKEYLOGFILE原理与浏览器配置指南

1. 为什么你抓不到HTTPS的明文——不是Wireshark不行&#xff0c;是浏览器在“加密保护”你很多人第一次尝试用Wireshark分析网页请求时&#xff0c;都会卡在一个看似简单却令人抓狂的问题上&#xff1a;HTTP流量清清楚楚&#xff0c;每个GET/POST、Header、Body都一览无余&…...

别再手动接线了!用ESP-01S转接板5分钟搞定AT固件烧录(附固件下载)

5分钟极简ESP-01S固件烧录指南&#xff1a;转接板避坑全攻略 当你第一次拿到ESP-01S模块时&#xff0c;是否被那密密麻麻的引脚和复杂的接线图吓到&#xff1f;作为物联网开发的入门神器&#xff0c;ESP-01S确实性价比极高&#xff0c;但传统的手动接线烧录方式让不少新手望而…...

2025年终极指南:PlayIntegrityFix让你的Root设备完美通过Google认证

2025年终极指南&#xff1a;PlayIntegrityFix让你的Root设备完美通过Google认证 【免费下载链接】PlayIntegrityFix Fix Play Integrity (and SafetyNet) verdicts. 项目地址: https://gitcode.com/GitHub_Trending/pl/PlayIntegrityFix 还在为Root后的Android设备无法正…...