首页 > 编程语言 >Python并发编程

Python并发编程

时间:2024-08-07 18:17:05浏览次数:15  
标签:多线程 Python 编程 并发 密集型 IO 进程 GIL CPU

简介

  • 多线程:threading,利用 cpu 和 io可以同时执行的原理,让 CPU 不会等待 IO 完成
  • 多进程:multiprocess,利用多核 CPU 的能力,真正的并行执行任务
  • 异步IO:asynio,在单线程利用 CPU 和 IO 同时执行的原理,实现函数异步执行

 

  • 使用 Lock 对共享资源加锁,防止冲突访问
  • 使用 Queue 实现不同线程/进程之间的数据通信,实现生产者-消费者模式
  • 使用线程池 Pool 进程池 Pool,简化线程/进程的任务提交、等待结束、获取结果
  • 使用subprocess启动外部程序的进程,并进行输入输出交互

怎样选择多进程、多线程、多协程

并发编程的三种方式

多线程 Thread

多进程 Process

多协程 Coroutine

 

CPU 密集型计算和 IO 密集型计算

CPU密集型(CPU-bound):

CPU密集型也叫计算密集型,是指 I/O 在很短的时间就可以完成,CPU 需要大量的计算和处理,特点是CPU占用率相当高。

例如:压缩解压缩、加密解密、正则表达式搜索

 

IO 密集型(I/O bound):
IO 密集型指的是系统运作大部分的状况是 CPU 在等 I/O (硬盘/内存)的读/写操作,CPU 占用率仍然较低。

例如:文件处理程序、网络爬虫程序、读写数据库程序

 

根据任务选择对应技术

 全局解释器锁 GIL

Python 速度慢的两大原因

 GIL是什么

 为什么有GIL这个东西

 怎样规避 GIL 带来的限制

 

标签:多线程,Python,编程,并发,密集型,IO,进程,GIL,CPU
From: https://www.cnblogs.com/JJJHaoran/p/18347602

相关文章

  • 19.python之自定义函数
    python之自定义函数一、函数的介绍1、函数定义:函数是一个组织好,可重复使用,实现单一或联合的代码段。2、函数作用:a、降低代码的冗余、b、增加代码的复用性c、提高程序的拓展性d、封装二、python的结构三、函数的使用1、格式:def函数名(变量):执行语句函数名(实际参数)#调......
  • Java并发编程——线程创建的4种常见方式
    文章目录一、继承Thread类创建创建线程类1.1Thread类解析1.2使用方法1.3优缺点二、实现Runable接口创建线程类2.1Runable接口解析2.2使用方法2.3优缺点三、使用Callable和FutureTask创建线程3.1Callable接口解析3.2RunnableFuture接口解析3.3Futu......
  • python装饰器提高代码复用,减少代码量,简洁易懂
    装饰器提高代码复用,减少代码量对于一个程序程序,无论是c、java、go还是python,组成这段程序的代码需要越简单越好,要知道程序的代码越简单,代码量越少,出错的概率就小,维护起来也简单。针对python语言,装饰器是我最近发现的针对简化代码,特别有帮助的工具。下面我用两段代码,演示一下同样......
  • python,怎么用工厂模式设计代码?
    工厂模式打造工厂模式,需要抽象工厂和具体工厂。怎么理解?抽象工厂就是接口的定义,但不负责具体的实现。而具体工厂则需要负责定义的接口的实现。就好比你爸爸让你上街时带一瓶酱油,而具体买什么牌子的由你决定。”你爸爸让带一瓶酱油“就是接口的定义函数,这个函数只负责定义”要求“......
  • python-深拷贝和浅拷贝
     浅拷贝list_name=["李琪",["周义杰","毛绍祺"]]data01=list_name[:]#触发浅拷贝:只复制第一层,共享深层数据data01[0]="琪琪"#修改第一层,数据2份,互不影响data01[1][0]="义杰"#修改深层,数据1份,数据互相影响print(list_name)print(data01) 深拷贝 作用:互不......
  • 音频应用编程-I.MX6U嵌入式Linux C应用编程学习笔记基于正点原子阿尔法开发板
    音频应用编程Linux下ALSA框架概述ALSA简介:ALSA是AdvancedLinuxSoundArchitecture(高级的Linux声音体系)的缩写地位与功能:现已成为Linux下的主流音频体系架构,提供音频和MIDI支持,替代了旧版本中的OSS(开放声音系统)框架设计:ALSA是Linux系统下标准且先进的......
  • Python 循环引用与内存泄漏:深度解析
    Python循环引用与内存泄漏:深度解析在Python编程中,循环引用和内存泄漏是两个需要特别注意的问题。本文将深入探讨Python中的循环引用现象、其导致的内存泄漏问题,并提供详细的解决思路与方法。同时,我们还将分析一些常见场景,并分享扩展与高级技巧,帮助读者全面理解和应对这一......
  • GitHub点赞飙升!电信大牛的Python渗透测试实战指南
    在网络安全领域,会不会编程,是区分“脚本小子”和真正黑客的关键。实际的渗透测试中会遇到各种复杂的网络环境,常用工具不一定能满足需求,这时就需要对现有工具进行扩展,或者编写符合要求的工具、自动化脚本,这都需要一定的编程能力。在分秒必争的CTF竞赛中,想要高效地使用自制脚本......
  • Python scipy.optimize 给出错误答案,如何处理半定正条件?
    目标是使用pythonscipy.optimize计算优化问题。假设C是给定的4维矩阵(在代码中我使用随机矩阵来表示)。优化后的变量为A0和B0,它们是二维对称矩阵。约束条件是I+A0、I-A0、I+B0、I-B0是半定正的,其中I是二维单位矩阵。目标函数为maxTr((A0⊗B0)C),其中⊗是克罗内克......
  • python+flask计算机毕业设计智慧养老系统(程序+开题+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着社会的快速发展和人口老龄化的加剧,智慧养老成为了社会关注的焦点。传统的养老模式已难以满足老年人日益增长的多元化需求,而智慧养老系......