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

Python中的并发编程

完善更新中......

一,并发编程简介

1.1 为什么要引入并发编程

        场景1:一个网络爬虫,按顺序爬取花了一小时,采用并发下载减少到20分钟

        场景2:一个App应用,优化前每次打开页面需要3秒,采用异步并发提升到每次200ms

        引入并发就是为了提升程序运行速度

1.2 有那些编程提速的方法

        

1.3 Python对并发编程的支持

  •         多线程:threading,利用CPU和IO可以同时执行的原理,让CPU不会干巴巴的等待IO完成
  •         多进程:multiprocessing,利用多核CPU的能力,真正的并行执行任务
  •         异步IO:asynico,在单线程利用CPU和IO同时执行的原理,实现函数异步执行
  •         锁:使用Lock锁对资源加锁,防止冲突访问
  •         数据通信:使用Queue实现不同线程,进程之间的数据通信,实现生产者,消费者模式
  •         Pool:使用线程池Pool/进程池Pool,简化线程/进程的任务提交,等待结束,获取结果等

二, python并发编程的选择

        python的并发编程有三种,多线程Thread,多进程Process,多协程Coroutine

2.1 什么是CPU密集型计算,IO密集型计算

        CPU密集型:也叫计算密集型,是指I/O在很短时间内就可以完成,CPU需要大量的计算和处理,特点是CPU占用率相当高,例如:解压缩/加密解密/正则表达式搜索

        IO密集型:系统运作过程中大部分的状况是CPU在等待I/O(硬盘/内存)的读/写操作,CPU占用率很低.例如:文件处理程序,网络爬虫程序,读写数据库程序

2.2 多线程,多进程,多协程之间的对比

一个进程包含多个线程,一个线程包含多个进程

        多进程Process(multiprocessing):

                优点:可以利用多核CPU并行运算

                缺点:占用资源最多,可启动数目比线程少

                适用于:CPU密集型计算

        多线程Thread(threading):

                优点:相比进程更轻量级,占用资源少

                缺点:

                        相比进程:多线程只能并发执行,不能利用多CPU(GIL)

                        相比协程:启动数目有限制,占用内存资源,有线程切换开销

                适用于:IO密集型计算,同时运行的任务数目要求不多

        多协程Coroutine(asyncio)

                优点:内存开销最少,启动协程数量最多

                缺点:支持的库有限(aiohttp VS requests)代码实现复杂

       

            

http://www.xdnf.cn/news/586855.html

相关文章:

  • Java集合框架与三层架构实战指南:从基础到企业级应用
  • OceanBase 系统表查询与元数据查询完全指南
  • 使用web3工具结合fiscobcos网络部署调用智能合约
  • JAVA:柔性一致性策略 BASE 原则
  • tasklet上下文内存分配触发might_alloc检查及同步回收调用链
  • 【C++】笔试强训 第一天
  • 【学习笔记】机器学习(Machine Learning) | 第七章|神经网络(3)
  • 并发编程之线程安全
  • 云原生安全 SaaS :从基础到实践
  • 驱动钛丝(SMA)的应用(5)汽车腰托气阀常见问题及解决方案
  • 101个α因子#23
  • 如何让 Agent 有计划地进行股票数据分析?——基于 DeepSeek 的实战应用
  • linux字符模式关闭光标
  • Linux操作系统:fork+exec进程创建
  • win11远程桌面设置60fps无效
  • 面试题 17.16. 按摩师
  • 软件开发的设计原则
  • 徐少春迎来AI的春天
  • spring中的BeanFactoryAware接口详解
  • 关于我对传统系统机构向大模型架构演进的认知
  • 无线网络优化配置:让你的Wi-Fi更快更稳
  • java: Can‘t generate mapping method with primitive return type
  • 高级SQL技巧:时序数据查询优化与性能调优实战
  • 天文数据处理:基于CUDA的射电望远镜图像实时去噪算法(开源FAST望远镜数据处理代码解析)
  • github cli主要用途,优势,和git的区别
  • PageHelper分页原理解析:从源码到MySQL方言实现
  • 基于开源AI大模型与智能硬件的零售场景服务创新研究——以AI智能名片与S2B2C商城小程序源码融合为例
  • [安全清单] Linux 服务器安全基线:一份可以照着做的加固 Checklist
  • 用Python和Backtrader库实现均值回归策略解析
  • 角度回归——八参数检测四边形RSDet