【并发编程Python】一文详解Python并发编程,协程、线程、进程

news2025/1/17 21:31:22

并发编程简介和一些前缀知识

        并发编程是使得程序大幅度提速的。在并发编程中,程序可以同一时间执行多个任务,这有助于提高程序的吞吐量和响应时间。并发编程设计的主要概念包括线程、锁、同步、信号量、进程间通信等。

前缀知识:

  • IO:电脑中的IO操作是指输入/输出操作,也称为I/O操作。它指的是计算机与外部设备(如键盘、鼠标、打印机、硬盘、光驱等)进行数据交换的操作。
  • CPU(中央处理器):是计算机中最重要的部件之一,它可以执行程序和指令,并控制和调度其他计算机组件的工作,以便完成各种任务。 

  • 单线程串行:我们有一个空闲的CPU,遇到了CPU执行的操作,CPU开始工作,停止接收其他操作,等待CPU工作完,遇到IO执行的操作,开始IO工作。
  • 多线程并发:我们有一个空闲的CPU,遇到了CPU执行的操作,CPU开始工作,工作一会儿,遇到IO执行操作,IO操作同时工作...,【threading库】
  • 多CPU并行: 我们有多个空闲的CPU,遇到了CPU执行的操作,其中一个空闲的CPU①开始工作,期间又遇到了CPU执行的操作,另外一个空闲的CPU②开始工作,工作一会儿,CPU①工作完毕,遇到IO执行的操作,IO开始工作,同时CPU②依旧在工作...,【multiprocessing】
  • 多机器并行:我们有多个机器,每个机器都有一个或者多个CPU,多个机器共同执行一个任务,原理如上面几点...【大数据组件:hadoop/hive/spark】

Python并发编程

      Python并发编程有三种方式:多线程Thread、多进程Process、多协程Coroutine。他们各有各适用的场景,根据不同的任务可以选择最恰当 的方式。

  • 多线程:threading库,利用CPU和IO可以同时执行的原理,让CPU和IO可以并行。
  • 多进程:multiprocessing库,利用多核CPU的能力,真正并行执行任务。
  • 异步IO:asyncio库在单线程的情况下利用CPU和IO同时执行的原理,实现函数异步执行。

额外函数辅助:

  • Lock:使用Lock对资源加锁,防止冲突访问。多线程/进程同时访问一个文件,同时写入/读取会导致冲突,在该文件正在被访问的时候锁起来,可以避免冲突。
  • Queue:使用Queue实现不同线程/进程之间的数据通信,实现生产者-消费者模式。用该模式优化爬虫,生产者-就是爬取数据,消费者就是解析数据,一边爬取一边解析实现提速。
  • Pool:使用线程池Pool/进程池Pool,简化线程/进程的任务提交、等待结束、获取结果。
  • subprocess:使用subprocess启动外部程序的进程,并进行输入输出交互。比如写好了一个.exe程序,使用该模块可以调起这个exe程序,和它进行IO交互,来实现交互式的进程通信。

1、三种并发机制较高下

  • 一个进程(multiprocessing)中可以启动并且包含很多个线程(Thread), 一个线程(Thread)中可以启动很多个协程(Coroutine),是一对多的关系。
  • 多进程是唯一一个可以调用多个CPU并行运算的方式。
  • 一个线程可以启动成千上万个协程,数量可以是极大量的,几乎没有限制的,而一个进程能调用的线程是有数量限制的。

2、如何择优!根据任务特点选择对应Python并发技术

一些必备的前缀知识:

  • CPU密集型计算(CPU-bound):CPU的限制,也叫计算密集型,是指I/O在很短的时间就可以完成,CPU需要大量的计算和处理,特点是CPU占用率相当高。例如:压缩解压缩、加密解密、正则表达式搜索。
  • IO密集型计算(I/O bound):IO密集型指的是系统运作大部分的状况是CPU在等待I/O(硬盘/内存)的读/写操作,CPU占用率仍然较低。例如:文件处理程序、网络爬虫程序,读写数据库程序。

  1. 对待执行任务来说,先看一下任务的特点,如果是CPU密集型的话,不用考虑太多,直接选用多进程multiprocessing来解决任务;
  2. 如果是IO密集型任务的话,就有两种选择,多协程是一种比较新的技术,相比于多线程会有很多优势,但同时也有很多限制,如果能任务能满足多协程的限制,那就自然的选择多协程,不然选择多线程

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

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

相关文章

Linux中shell内外命令讲解(上)

♥️作者:小刘在C站 ♥️个人主页:小刘主页 ♥️每天分享云计算网络运维课堂笔记,努力不一定有收获,但一定会有收获加油!一起努力,共赴美好人生! ♥️夕阳下,是最美的绽放,树高千尺,落叶归根人生不易,人间真情 前言 本章Linuxshell讲解,感谢观看,干货满满。 目录…

在windows内使用virtualbox搭建安卓x86,以及所遇到的问题解决--2.virtualbox上安卓x86的配置

目录: 简要说明: 1.配置vesa驱动: 2.启用网络连接并配置adb: 3.增强性能的方法: 简要说明: 先进行说明一点个人直接通过vbox VMware这些软件,并不能超越专业的安卓模拟器,大部分模拟器实际…

使用Pytorch实现对比学习SimCLR 进行自监督预训练

SimCLR(Simple Framework for Contrastive Learning of Representations)是一种学习图像表示的自监督技术。 与传统的监督学习方法不同,SimCLR 不依赖标记数据来学习有用的表示。 它利用对比学习框架来学习一组有用的特征,这些特征…

【创作赢红包】Java Web 实战 18 - 计算机网络之网络层协议 and 数据链路层协议

文章目录网络层协议1. IP 协议1.1 报头结构1.2 IP 协议的地址管理动态分配 IP 地址 (DHCP)IP 地址转换 (NAT)IPv61.3 IP 地址的组成2. 路由选择数据链路层1. 以太网协议2. 以太网帧格式2.1 mac 地址2.2 两个特殊的以太网数据帧DNS 域名解析系统六 . 经典面试题 : 从浏览器中输入…

微信小程序 | 基于ChatGPT实现模拟面试小程序

Pre:效果预览 ① 选择职位进行面试 ② 根据岗位职责进行回答 一、需求背景 这两年IT互联网行业进入寒冬期,降本增效、互联网毕业、暂停校招岗位的招聘,各类裁员、缩招的情况层出不穷!对于这个市场来说,在经历了互联网…

小白学Pytorch系列--Torch API (7)

小白学Pytorch系列–Torch API (7) Comparison Ops allclose 此函数检查输入和其他是否满足条件: >>> torch.allclose(torch.tensor([10000., 1e-07]), torch.tensor([10000.1, 1e-08])) False >>> torch.allclose(torch.tensor([10000., 1e-…

MATLAB | 如何自然好看的从图片中提取颜色并制作色卡

在这里研究了一下各种排序算法,写一篇如何由图片一键生成颜色条的方法。 1 关于大量颜色排序 假设有大量颜色怎么对其进行排序呢,首先想到的最简单方法就是将其按照RGB值的大小进行排序,为了方便展示颜色条,这里编写了一个颜色条…

【Pytorch】 理解张量Tensor

本文参加新星计划人工智能(Pytorch)赛道:https://bbs.csdn.net/topics/613989052 这是目录张量Tensor是什么?张量的创建为什么要用张量Tensor呢?总结张量Tensor是什么? 在深度学习中,我们经常会遇到一个概念&#xff…

初探Redis整体架构

文章目录1、Redis为什么选择单线程2、逐步加入多线程3、Redis采用IO多路复用---epoll和Reactor架构4、Redis6/7默认是否开启了多线程?1、Redis为什么选择单线程 这种问法其实并不严谨,为啥这么说呢? Redis几个里程碑式的重要版本 理清一个事实&#…

一文带你安装opencv和常用库(保姆级教程少走80%的弯路)

0.导语 离上一个opencv安装保姆级教程发布已经过去了快一年了,这一年来我收到了来自很多C友的鼓励。打算学opencv的各位朋友都会在安装opencv和各种库过程中浪费掉60%的时间和精力;博主在这一年来尝试各种各样的安装方法,全网搜集各种资料总…

[ 云计算 | Azure ] Chapter 05 | 核心体系结构之管理组、订阅、资源和资源组以及层次关系

本文主要对如下内容进行讲解:Azure云计算的核心体系结构组件中的:资源、订阅和资源组,以及了解 Azure 资源管理器 (ARM) 如何部署资源。 本系列已经更新文章列表: [ 云计算 | Azure ] Chapter 03 | 描述云计算运营中的 CapEx 与…

元宇宙与网络安全

元宇宙是一种虚拟现实空间,用户可以在计算机生成的环境中进行互动。元宇宙的应用范围很广,比如房地产,医疗,教育,军事,游戏等等。它提供了更具沉浸感的体验,更好地现实生活整合,以及…

图像分类算法:ResNet论文解读

图像分类算法:ResNet论文解读 前言 ​ 其实网上已经有很多很好的解读各种论文的文章了,但是我决定自己也写一写,当然,我的主要目的就是帮助自己梳理、深入理解论文,因为写文章,你必须把你所写的东西表达清楚…

游戏工厂:AI(AIGC/ChatGPT)与流程式游戏开发(码客 卢益贵)

关键词:AI(AIGC、ChatGPT、文心一言)、流程式管理、好莱坞电影流程、电影工厂、游戏工厂、游戏开发流程、游戏架构、模块化开发 一、前言 开发周期长、人工成本高、成功率低等使得游戏公司融资比较困难。有的公司凭一个爆款游戏一骑绝尘之后…

奇异值分解(SVD)和图像压缩

在本文中,我将尝试解释 SVD 背后的数学及其几何意义,还有它在数据科学中的最常见的用法,图像压缩。 奇异值分解是一种常见的线性代数技术,可以将任意形状的矩阵分解成三个部分的乘积:U、S、V。原矩阵A可以表示为&#…

阿里通义千问、百度文心一言、ChatGPT与GPT-4大比拼

各个大模型的研究测试传送门 ​阿里通义千问传送门: https://tongyi.aliyun.com/chat 百度文心一言传送门: https://yiyan.baidu.com/ ChatGPT传送门(免墙,可直接注册测试): https://wowchat.cn GPT…

离线安装k8s/kubernetes v1.17.1并部署服务验证功能

条件: 3台没有网络的centos7.9服务器 1.系统优化 hostnamectl set-hostname k8s-master && bash #只在master节点上执行 hostnamectl set-hostname k8s-node1 && bash #只在node1节点上执行 hostnamectl set-hostname k8s-node2 && …

嵌入式:BSP的理解

BSP概念总结BSP定义BSP的特点BSP的主要工作BSP在嵌入式系统和Windowsx系统中的不同BSP和PC机主板上的BIOS区别BSP与 HAL关系嵌入式计算机系统主要由 硬件层,中间层,系统软件层和应用软件层四层组成。硬件层:包含CPU,存储器(SDRAM&…

(数字图像处理MATLAB+Python)第四章图像正交变换-第一节:离散傅里叶变换

文章目录一:一维离散傅里叶变换(1)定义(2)实例二:一维快速傅里叶变换(1)定义(2)实例三:二维离散傅里叶变换(1)定义&#x…

SpringCloud微服务技术栈.黑马跟学(十二)

SpringCloud微服务技术栈.黑马跟学 十二今日目标服务异步通信-高级篇1.消息可靠性1.1.生产者消息确认1.1.1.修改配置1.1.2.定义Return回调1.1.3.定义ConfirmCallback1.2.消息持久化1.2.1.交换机持久化1.2.2.队列持久化1.2.3.消息持久化1.3.消费者消息确认1.3.1.演示none模式1.3…