Python程序龟速过载怎么办,asyncio并发教程来解决

news2024/11/17 22:27:20

前言

许多应用程序,尤其在当今的Web应用程序领域,严重依赖I/O操作。这些类型的操作包括从Internet下载网页的内容、通过网络与一组微服务进行通信,或者针对MySQL或Postgres等数据库同时运行多个查询。Web请求或与微服务的通信可能需要数百毫秒,如果网络很慢,甚至可能需要几秒钟。数据库查询可能耗费大量时间,尤其是在该数据库处于高负载或查询很复杂的情况下。Web服务器可能需要同时处理数百或数千个请求。

一次发出许多这样的I/O请求会导致严重的性能问题。如果像在顺序运行的应用程序中那样一个接一个地执行这些请求,将看到复合的性能影响。例如,如果正在编写一个需要下载100个网页或执行100个查询的应用程序,每个查询需要1秒的执行时间,那么应用程序将至少需要100秒才能运行完成。此问题的一种解决方案是引入并发性,同时启动下载和等待,理论上可在短短秒内完成这些操作。简单来说,并发意味着允许同时处理多个任务。在并发I/O的情况下,允许同时发出多个Web请求或允许多个客户端同时连接到服务器。

关于asyncio

Python生态系统的最新成员之一是asyncio库。asyncio是异步I/O的缩写。它是一个Python库,允许使用异步编程模型运行代码。这让我们可以一次处理多个I/O操作,同时仍然允许应用程序保持对外界的响应。异步编程意味着一个特定的长时间运行的任务可以在后台运行,与主应用程序分开。系统可以自由地执行不依赖于该任务的其他工作,而不是阻止其他所有应用程序代码等待该长时间运行的任务完成。一旦长时间运行的任务完成,会收到它已经完成的通知,以便对结果进行处理。

在Python3.4中,asyncio首先引入了装饰器和生成器通过yieldfrom来定义协程。协程是一种方法,当有一个可能长时间运行的任务时,它可以暂停,然后在任务完成时恢复。在Python3.5中,当关键字async和await被显式添加到语言中时,该语言实现了对协程和异步编程的顶级支持。这种语法在C#和JavaScript等其他编程语言中很常见,使异步代码看起来像是同步运行的。这样异步代码易于阅读和理解,因为它看起来像大多数软件工程师熟悉的顺序流。

asyncio是一个库,使用称为单线程事件循环的并发模型以异步方式执行这些协程。虽然asyncio的名字可能会让我们认为这个库只适用于I/O操作,但它也可通过与多线程和多处理进行互操作来处理其他类型的操作。通过这种互操作性,可使用线程和进程的async与await语法,使这些工作流更容易理解。这意味着这个库不仅适用于基于的并发性,还可以用于密集型代码。

《Python asyncio并发编程》

《Pythonasyncio并发编程》旨在介绍如何在Python中利用并行技术提高应用程序的性能、吞吐量和响应能力。本书首先关注并行的核心主题,解释asyncio的单线程并发模型是如何工作的,以及协程和async/await语法的工作原理。然后介绍并发的实际应用,例如并行发出多个Web请求或数据库查询、管理线程和进程、构建Web应用程序,以及处理同步问题。

本书作者MatthewFowler拥有近20年的软件工程经验,曾任软件架构师、工程总监等多个职位。他起初为科学应用程序编写软件,然后转向全栈Web开发和分布式系统,最终领导多个开发人员和管理人员团队为拥有数千万用户的电子商务网站编写应用程序及构建系统。

标准Python程序很容易过载,从而出现慢如龟爬的情况。asyncio库正是为了解决这些问题而构建的,它简化了任务的划分和调度。asyncio可无缝地同时处理多个操作,使应用程序疾如闪电,且具有扩展性。《Python asyncio并发编程》在大量示例的引导下,介绍异步、并行和并发编程。将难理解的并发内容分解为简明易懂的流程图,使读者可轻松了解任务的运行方式。在本书中,读者将学习如何使用asyncio来突破Python的限制,从而加快Web服务器和微服务的运行速度。读者甚至可将asyncio与传统的多处理技术结合起来,以大幅提升性能。

本书主要内容
● 通过aiohttp构建支持并发Web请求的Web API
● 同时运行海量SQL查询
● 创建一个可并行处理数GB数据的map-reduce作业
● 在asyncio中使用线程来混合阻塞代码和asyncio代码

书目详情

京东购买链接

《Python asyncio并发编程》([英]马修·福勒(Matthew,Fowler),殷海)【摘要 书评 试读】- 京东图书 (jd.com)icon-default.png?t=N7T8https://item.jd.com/13661117.html当当购买链接

《Python asyncio并发编程》([英]马修·福勒(Matthew Fowler)著 殷海英 译)【简介_书评_在线阅读】 - 当当图书 (dangdang.com)icon-default.png?t=N7T8http://product.dangdang.com/29545308.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1113176.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【数据结构】——二叉树的基础知识

数概念及结构 数的分类 二叉树、多叉树 数的概念 树是一种非线性的数据结构,它是由n(n>0)个有限节点组成一个具有层次关系的集合。把它叫做树的原因是它看起来像一颗倒挂的树,也就是说它是跟朝上,而叶朝下的。 有一个特殊的节点&…

小红书达人怎么对接,博主沟通流程汇总!

想要在小红书平台进行宣推,就离不开博主的帮助。一般来说,与小红书博主沟通,分为意向沟通、下单沟通、内容沟通和数据沟通方面。今天为大家分享下小红书达人怎么对接,博主沟通流程汇总! 一、意向沟通 意向沟通是小红书…

MyBatis中怎样查看执行的sql语句日志?

MyBatis中怎样查看执行的sql语句日志? 在mybatis中我们执行sql语句是通过动态代理接口执行的,我们并不能看到内部的sql的执行情况,所以你执行完一个接口之后,你也不知道sql到底有没有执行?以及sql执行的对不对&#x…

【试题016】逗号表达式例题

1.题目&#xff1a;设int a,b;,则表达式(b2,a5,b,ab)的值是 &#xff1f; 2.代码分析&#xff1a; #include <stdio.h> int main() {//设int a,b;,则表达式(b2,a5,b,ab)的值是 ()int a, b;printf("%d\n", (b 2, a 5, b, a b));//分析&#xff1a;逗号表达…

基于Java+Springboot+Vue前后端分离的商品进销存管管理系统

✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取项目下载方式&#x1f345; 一、项目背景介绍&#xff1a; 当今社会&#xff0c;…

dubbogo-02 将服务注册到nacos

增加dubbo配置 dubbo:application:name: gotestmodule: gotestgroup: daoorganization: qiudaozhangowner: qiudaozhangversion: 0.1environment: proregistries:nacosWithCustomGroup:protocol: nacos # 注册中心选择 nacosaddress: 127.0.0.1:8848 # nacos ipgroup: RIDE # …

3、Kafka Broker

4.1 Kafka Broker 工作流程 4.1.1 Zookeeper 存储的 Kafka 信息 &#xff08;1&#xff09;启动 Zookeeper 客户端。 [hadoop102 zookeeper-3.5.7]$ bin/zkCli.sh&#xff08;2&#xff09;通过 ls 命令可以查看 kafka 相关信息。 [zk: localhost:2181(CONNECTED) 2] ls /kaf…

最爱问的高频ConcurrentHashMap原理,你会了吗?

1、ConcurrentHashMap 是什么&#xff1f;它的工作原理是什么&#xff1f; ConcurrentHashMap 是Java中的一个线程安全的散列表实现。与HashMap不同&#xff0c;ConcurrentHashMap支持多个线程同时访问和修改散列表&#xff0c;而不需要任何额外的同步机制。 ConcurrentHashM…

C++ vector类模拟实现

目录 一、成员变量 二、构造函数 1.默认构造 2.拷贝构造 3.迭代器构造 4.使用n个值构造 5.赋值拷贝 三、析构函数 四、vector重要成员函数 1.size和capacity函数 2.reserve函数 3.resize函数 4.push_back函数 5.insert函数 6.erase函数 7.重载operator[] 一、成…

html 按钮点击倒计时,限制不可点击

html 按钮点击倒计时&#xff0c;限制不可点击 e94cbabd25cfc7f3f53a50a235734c22.jpg <!DOCTYPE html> <html><head><meta http-equiv"Content-Type" content"text/html; charsetutf-8" /><title></title></head&…

Ubuntu20.4 设置代理

主要是涉及2个代理 涉及apt 可以在、/etc/apt/apt.conf 中进行修改 在系统全局可以在/etc/profile中进行修改

2023年最新全国各省行政区划数据(省-市-区县-乡镇-村)

背景 现实情况&#xff0c;在信息系统开发、电子商务平台、app等等相关软件开发&#xff0c;都会设计到行政区数据联动&#xff0c;这里已经爬好全国各省行政区划数据可供下载。 数据来源 内容为2023年全国统计用区划代码&#xff08;12位&#xff09;和城乡分类代码&#xff…

跨境电商:产业带的深度赋能

近年来&#xff0c;中国跨境电商平台崭露头角&#xff0c;成为推动国内产业带转型升级和出海的新引擎。这一充满活力的领域不仅让中国制造走向世界&#xff0c;也为国内众多产业提供了数字化升级的机会&#xff0c;实现了“小单快反”和按需供应。 专业跨境电商平台如SHEIN和阿…

RabbitMQ整理

MQ(Message Queue)&#xff1a;是队列&#xff0c;也是跨进程的通信机制&#xff0c;用于上下游传递信息 FIFO(First In First Out)&#xff1a;先进先出 RabbitMQ访问&#xff1a;http://127.0.0.1:15672/ 默认账号密码&#xff1a;guest 优势&#xff1a;流量削峰&#x…

计网----使用代码实现C/S模型的数据通信,IP地址分类,子网掩码,网关,广播地址,非默认子网掩码,子网划分的常见问题

计网----使用代码实现C/S模型的数据通信,IP地址分类,子网掩码,网关,广播地址,非默认子网掩码,子网划分的常见问题 一.使用代码实现C/S模型的数据通信&#xff08;七层网络系统的博客https://blog.csdn.net/m0_73483024/article/details/133916201?spm1001.2014.3001.5502的后…

completablefuture的使用

CompletableFuture使用详解 【Java异常】Variable used in lambda expression should be final or effectively final CompletableFuture原理与实践-外卖商家端API的异步化 项目描述 项目接口需要从下游多个接口获取数据&#xff0c;并且下游的网络不稳定还会涉及到循环调用…

DC电源模块的模拟电源对比数字电源的优势有哪些?

BOSHIDA DC电源模块的模拟电源对比数字电源的优势有哪些&#xff1f; DC电源模块是一种电子元件&#xff0c;用于将交流电转换为直流电&#xff0c;以供电路板、集成电路等电子设备使用。在直流电源模块中&#xff0c;有模拟电源和数字电源两种类型。 模拟电源是一种传统的电源…

如何使双核心的ESP32开启双核功能同时执行多任务

如何使双核心的ESP32开启双核功能同时执行多任务 简介查看ESP32当前哪一个内核在执行任务双核同时执行任务总结 简介 ESP32-WROOM-32模组内置两个低功耗 Xtensa 32-bit LX6 MCU&#xff0c;两个 CPU 核&#xff08;core 0与core 1&#xff09;可以被单独控制。可以在两个内核上…

PHP数据加密传输和存储问题

PHP数据加密的类型 md5()&#xff0c;sha1()&#xff0c;crypt() 双md5加密加盐