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

news2025/3/11 0:28:59

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

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

前缀知识:

  • 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/413667.html

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

相关文章

信息系统项目管理师第四版知识摘编:第22章 组织通用治理​

第22章 组织通用治理​ 组织治理是协调组织利益相关者之间关系的一种制度安排,目标是为了确保组织的高效决策,实现利益相关者之间的利益均衡,提高组织的绩效,确保组织运行的可持续发展。​ 22.1组织战略​ 组织战略是组织高质量…

一文读懂:低代码开发平台对企业效益有什么作用?

一文读懂:低代码开发平台对企业效益有什么作用? 近年来,企业数字化转型的需求越来越迫切,但面临着IT人才不足、成本高昂等痛点问题,于是零代码平台应运而生,成为企业数字化转型的重要工具。 市面上的零代…

基于支持向量机SVM的脑部肿瘤识别,脑电波样本熵提取

目录 支持向量机SVM的详细原理 SVM的定义 SVM理论 Libsvm工具箱详解 简介 参数说明 易错及常见问题 SVM应用实例,基于SVM的的脑部肿瘤识别分类预测 代码 结果分析 展望 支持向量机SVM的详细原理 SVM的定义 支持向量机(support vector machines, SVM)是一种二分类模型,它…

Spring boot+Vue博客平台:文章列表展示、文章分类与标签管理模块实现

本文将详细介绍如何实现博客平台中的文章列表展示、文章分类与标签管理功能,包括前端的Vue组件设计和后端的Spring Boot接口实现。在阅读本文后,您将了解如何设计和实现高效、易用的文章列表展示、文章分类与标签管理功能。 一、文章列表展示 1.设计思…

电脑蓝屏错误MACHINE-CHECK-EXCEPTION重装系统教程

电脑蓝屏错误MACHINE-CHECK-EXCEPTION重装系统教程分享。最近有用户电脑遇到了蓝屏问题,正常使用电脑的时候常常会出现了蓝屏错误代码“MACHINE-CHECK-EXCEPTION”。那么遇到这个问题要怎么去进行系统的重装呢?来看看以下的具体操作方法教学吧。 准备工作…

JVM/GC/CMS

CMS (Concurrent Mark Sweep) jdk1.4后期版本开始引入的新gc算法ParNew(新生代) CMS(老年代)组合使用使用标记-清除算法目标:适合于B/S等对响应时间要求高的场景缺点:运行结束产生大量空间碎片缺点:由于分配给用户使用的老年代空间不足造成…

一文快速回顾 Servlet、Filter、Listener

什么是Servlet? 前置知识: Web 服务器:可以指硬件上的,也可以指软件上的。从硬件的角度来说, Web 服务器指的就是一台存储了网络服务软件的计算机;从软件的角度来说, Web 服务器指的是一种软件…

使用codon加速你的python程序

使用codon加速你的python程序 作为高性能 Python 编译器,Codon 可将 Python 代码编译为本机机器代码,而无需任何运行时开销。在单线程上,Python 的典型加速大约为 10-100 倍或更多。Codon 的性能通常与 C/C 的性能相当。与 Python 不同&#…

Three.js教程:第一个3D场景

推荐:将NSDT场景编辑器加入你3D工具链其他工具系列:NSDT简石数字孪生下面的代码完整展示了通过three.js引擎创建的一个三维场景,在场景中绘制并渲染了一个立方体的效果,为了大家更好的宏观了解three.js引擎, 尽量使用了…

【linux】进程和线程的几种状态及状态切换

文章目录一、进程的状态1.1 进程的三种状态1.2 三种状态转换图1.3 三种状态之间的转换1.4 linux下的进程进程状态二、线程的状态三、总结一、进程的状态 1.1 进程的三种状态 进程状态:一个进程的生命周期可以划分为一组状态,这些状态刻画了整个进程。进…

安装spacy+zh_core_web_sm避坑指南

目录 一、spacy简介 二、安装spacy 三、安装zh_core_web_sm 四、安装en_core_web_sm 五、效果测试 5.1 英文测试 5.2 中文测试 一、spacy简介 spacy是Python自然语言处理(NLP)软件包,可以对自然语言文本做词性分析、命名实体识别、依赖…

Java数组的四种拷贝方式

🎉🎉🎉点进来你就是我的人了 博主主页:🙈🙈🙈戳一戳,欢迎大佬指点!人生格言:当你的才华撑不起你的野心的时候,你就应该静下心来学习! 欢迎志同道合的朋友一起加油喔🦾&am…

ERTEC200P-2 PROFINET设备完全开发手册(3-2)

周期数据分为两大类,输出数据OutputData和输入数据InputData,输出数据是PLC发送给设备的;输入数据是设备发送给PLC。如果采用标准接口(SI),读取输出数据和写入输入数据都是一次初始化数据读写调用和一次/多…

【ChatGPT】多国“围堵”,万人抵制,AI发展的红线到底在哪?

个人主页:【😊个人主页】 文章目录前言Chatgpt💻💻💻多国拟发ChatGPT禁令🈲🈲🈲开端发展高潮联名抵制自我辩解🎛️🎛️🎛️名家争言比尔盖茨&…

TiDB进阶篇-TiKV架构

简介 简要的介绍下TiKV的架构。 底层存储RocksDB RocksDB的写操作 在写入WAL的时候为了防止操作系统写入的时候有缓存,要设置操作系统的参数sync_logtrue,也就是说只要有数据就执行刷写到磁盘,就不会存储到操作系统的缓存了。MemTable的数据…

【Python】无限逼近求积分

✨博文作者 wangzirui32 💖 喜欢的可以 点赞 收藏 关注哦~~ 👉本文首发于CSDN,未经许可禁止转载 Hello,大家好,我是wangzirui32,今天我们来学习如何用Python无限逼近求积分,开始学习吧&#xff…

krita源码提供了Tarball 和KDE Repository两套源码的区别

krita系列文章目录 文章目录krita系列文章目录前言一、Tarball 和KDE Repository区别是什么?二、使用步骤前言 krita官方主页 krita官方下载界面 krita源码提供了Tarball 和KDE Repository两套源码,我一下就懵圈了,不知道两者的区别 一…

第二章 自然语言处理与单词的分布式表示

目录2.1 自然语言处理(Natural Language Processing,NLP)2.2 同义词词典2.2.1 WordNet2.2.2 同义词词典的问题2.3 基于计数的方法2.3.1 基于 Python的语料库的预处理2.3.2 单词的分布式表示2.3.3 分布式假设2.3.4 共现矩阵2.3.5 向量间的相似…

有哪些中西合璧的建筑设计?

所谓中西合璧,中即中华文化,体系繁多,源远流长,浩如烟海,是世界三大文化体系之一,在历史上曾是东亚文化的中心,一度影响欧洲;西即西方文化,西方物质文明和精神文明&#…

【JSP学习笔记】1.JSP 教程、简介及开发环境搭建

前言 本章介绍JSP的教程、简介及开发环境搭建。 JSP 教程 JSP 与 PHP、ASP、ASP.NET 等语言类似,运行在服务端的语言。 JSP(全称Java Server Pages)是由 Sun Microsystems 公司倡导和许多公司参与共同创建的一种使软件开发者可以响应客户…