详解Python的多任务进程
目录
- 1.基本概念
- 2.线程和进程比较
- 3.协程和线程的比较
- 总结
1.基本概念
定义 | 含义 |
---|---|
并发: | concurrency,同一时刻只能有一条指令执行,但是多个线程的对应的指令被快速轮换地执行 |
并行 | parallel,同一时刻,有多条指令在多个处理器上同时执行,并行必须要依赖于多个处理器 |
阻塞 | 程序未得到所需计算资源时被挂起的状态 |
非阻塞 | 程序在等待某操作过程中,自身不被阻塞,可以继续处理其他的事情 |
同步 | 不同程序单元为了完成某个任务,在执行过程中需靠某种通信方式以协调一致,我们称这些程序单元是同步执行的 |
异步 | 为完成某个任务,不同程序单元之间过程中无需通信协调,也能完成任务的方式,不相关的程序单元之间可以是异步的 |
2.线程和进程比较
名称 | 含义 | 应用场景 |
---|---|---|
多线程 | 系统进行运算调度的最小单位 | IO密集型(磁盘IO ,网络IO ,数据库IO 等,譬如爬虫,网站开发等) |
多进程 | 系统进行资源分配的最小单位 | CPU密集型(大数据分析,机器学习等) |
多协程 | 程序员级别的调度 | 高并发的场景 |
3.协程和线程的比较
多线程:
- 多个线程切换需要频繁的加锁解锁,
- 需要保存或者恢复cpu上下文,
- 每个线程还需要有缓存cache等数据
多协程:
- 协程的切换是在单线程里实现任务的切换
- 且协程拥有自己的寄存器上下文和栈,无需线程上下文切换的开销
- 无需原子操作锁定及同步的开销
总结
本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注我们的更多内容!
相关推荐
-
python实现通过队列完成进程间的多任务功能示例
本文实例讲述了python实现通过队列完成进程间的多任务功能.分享给大家供大家参考,具体如下: 1.通过队列完成进程间的多任务 import multiprocessing def download_data(q): """下载数据""" # 模拟从网上下载数据 data = [11, 22, 33, 44] # 向队列中写入数据 for temp in data: q.put(temp) print("----数据下载完成并且已存入队
-
python利用线程实现多任务
我们怎么让一个 Python 程序里边实现多任务呢? 实现多任务可以有多种方式,这里我们先了解使用线程的方式实现多任务. 线程是实现多任务的一种的手段. 其实用的是 threading 模块,threading 模块里有一个类叫 Thread. Python 的 thread 模块是比较底层的模块,Python 的 threading 模块是对 thread 做了一些包装的,可以更加方便的被使用. 一.通过构造器传函数的方式创建线程 我们先来看一个实例: import time import t
-
Python实现多任务进程示例
目录 一.进程介绍 二.线程和进程之间的对比 三.Python 实现多进程 四.进程之间的通信 五.进程池之间的通信 六.案例:文件批量复制 一.进程介绍 进程:正在执行的程序,由程序.数据和进程控制块组成,是正在执行的程序,程序的一次执行过程,是资源调度的基本单位. 程序:没有执行的代码,是一个静态的. 二.线程和进程之间的对比 由图可知:此时电脑有 9 个应用进程,但是一个进程又会对应于多个线程,可以得出结论: 进程:能够完成多任务,一台电脑上可以同时运行多个 QQ 线程:能够完成多任务,一
-
利用 Python 实现多任务进程
目录 一.进程介绍 二.线程和进程之间的对比 三.使用多进程的优势 1.拥有独立GIL 2.效率高 四.Python 实现多进程 1.使用 process 类 2.继承 process 类 五.进程之间的通信 1.Queue-队列 先进先出 2.共享全局变量不适用于多进程编程 六.进程池之间的通信 1.进程池引入 七.案例:文件批量复制 一.进程介绍 进程:正在执行的程序,由程序.数据和进程控制块组成,是正在执行的程序,程序的一次执行过程,是资源调度的基本单位. 程序:没有执行的代码,是一个静态
-
详解python程序中的多任务
现实生活中,有很多场景中的事情是同时进行的,比如开车的时候,手和脚共同来驾驶汽车,再比如唱歌跳舞也是同时进行的. 以上这些可以理解为多任务.那在程序中怎么能做到多任务,它有什么好处? 接下来我们来看看没有多任务的程序是什么效果. import time def sing(): for i in range(5): print("正在唱...") time.sleep(1) def dance(): for i in range(5): print("正在跳...")
-
详解Python的多任务进程
目录 1.基本概念 2.线程和进程比较 3.协程和线程的比较 总结 1.基本概念 定义 含义 并发: concurrency,同一时刻只能有一条指令执行,但是多个线程的对应的指令被快速轮换地执行 并行 parallel,同一时刻,有多条指令在多个处理器上同时执行,并行必须要依赖于多个处理器 阻塞 程序未得到所需计算资源时被挂起的状态 非阻塞 程序在等待某操作过程中,自身不被阻塞,可以继续处理其他的事情 同步 不同程序单元为了完成某个任务,在执行过程中需靠某种通信方式以协调一致,我们称这些程序单元
-
详解Python中的进程和线程
进程是什么? 进程就是一个程序在一个数据集上的一次动态执行过程.进程一般由程序.数据集.进程控制块三部分组成.我们编写的程序用来描述进程要完成哪些功能以及如何完成:数据集则是程序在执行过程中所需要使用的资源:进程控制块用来记录进程的外部特征,描述进程的执行变化过程,系统可以利用它来控制和管理进程,它是系统感知进程存在的唯一标志. 线程是什么? 线程也叫轻量级进程,它是一个基本的CPU执行单元,也是程序执行过程中的最小单元,由线程ID.程序计数器.寄存器集合和堆栈共同组成.线程的引入减小了程序并发
-
详解python网络进程
目录 一.多任务编程 二.进程 三.os.fork创建进程 3.1.进程ID和退出函数 四.孤儿和僵尸 4.1.孤儿进程 4.2.僵尸进程 4.3.如何避免僵尸进程的产生 五.Multiprocessing创建进程 5.1.multiprocessing进程属性 六.进程池 七.进程间通信(IPC) 7.1.管道通信(Pipe) 7.2.消息队列 7.3.共享内存 7.4.信号量(信号灯集) 一.多任务编程 意义:充分利用计算机的资源提高程序的运行效率 定义:通过应用程序利用计算机多个核心,达到
-
详解Python中的GIL(全局解释器锁)详解及解决GIL的几种方案
先看一道GIL面试题: 描述Python GIL的概念, 以及它对python多线程的影响?编写一个多线程抓取网页的程序,并阐明多线程抓取程序是否可比单线程性能有提升,并解释原因. GIL:又叫全局解释器锁,每个线程在执行的过程中都需要先获取GIL,保证同一时刻只有一个线程在运行,目的是解决多线程同时竞争程序中的全局变量而出现的线程安全问题.它并不是python语言的特性,仅仅是由于历史的原因在CPython解释器中难以移除,因为python语言运行环境大部分默认在CPython解释器中. 通过
-
详解Python实现多进程异步事件驱动引擎
本文介绍了详解Python实现多进程异步事件驱动引擎,分享给大家,具体如下: 多进程异步事件驱动逻辑 逻辑 code # -*- coding: utf-8 -*- ''' author: Jimmy contact: 234390130@qq.com file: eventEngine.py time: 2017/8/25 上午10:06 description: 多进程异步事件驱动引擎 ''' __author__ = 'Jimmy' from multiprocessing import
-
详解Python之unittest单元测试代码
前言 编写函数或者类时,还可以为其编写测试.通过测试,可确定代码面对各种输入都能够按要求的那样工作. 本次我将介绍如何使用Python模块unittest中的工具来测试代码. 测试函数 首先我们先编写一个简单的函数,它接受姓.名.和中间名三个参数,并返回完整的姓名: names.py def get_fullname(firstname,lastname,middel=''): '''创建全名''' if middel: full_name = firstname + ' ' + middel
-
详解python中的线程
Python中创建线程有两种方式:函数或者用类来创建线程对象. 函数式:调用 _thread 模块中的start_new_thread()函数来产生新线程. 类:创建threading.Thread的子类来包装一个线程对象. 1.线程的创建 1.1 通过thread类直接创建 import threading import time def foo(n): time.sleep(n) print("foo func:",n) def bar(n): time.sleep(n) prin
-
详解python中GPU版本的opencv常用方法介绍
引言 本篇是以python的视角介绍相关的函数还有自我使用中的一些问题,本想在这篇之前总结一下opencv编译的全过程,但遇到了太多坑,暂时不太想回看做过的笔记,所以这里主要总结python下GPU版本的opencv. 主要函数说明 threshold():二值化,但要指定设定阈值 blendLinear():两幅图片的线形混合 calcHist() createBoxFilter ():创建一个规范化的2D框过滤器 canny边缘检测 createGaussianFilter():创建一个Ga
-
详解Python IO口多路复用
什么是IO 多路复用呢? 我一个SocketServer有500个链接连过来了,我想让500个链接都是并发的,每一个链接都需要操作IO,但是单线程下IO都是串行的,我实现多路的,看起来像是并发的效果,这就是多路复用! 概念说明: 在进行解释之前,首先要说明几个概念: - 用户空间和内核空间 现在操作系统都是采用虚拟存储器,那么对32位操作系统而言,它的寻址空间(虚拟存储空间)为4G(2的32次方).操作系统的核心是内核,独立于普通的应用程序,可以访问受保护的内存空间,也有访问底层硬件设备的所有权
随机推荐
- CKeditor与syntaxhighlight打造joomla代码高亮
- JavaScript正则表达式校验非负整数实例
- java并发之ArrayBlockingQueue详细介绍
- Spring MVC中自定义拦截器的实例讲解
- JS来动态的修改url实现对url的增删查改
- javascript实现密码强度显示
- Microsoft Visual Studio 2017 for Mac Preview安装使用案例分享
- 阿里云安装mysql数据库出现2002错误解决办法
- 解读mysql主从配置及其原理分析(Master-Slave)
- 一段在asp中加密与解密对应的函数
- 走出房间Flash高智商,建议大家试试娱乐一下 原创
- VBS教程:运算符-幂运算符 (^)
- 解析Linux下的时间函数:设置以及获取时间的方法
- 可以用IE轻松远程控制对方电脑的软件 motelyAnywhere 安装使用图文教程
- js获取json元素数量的方法
- PHP和Mysqlweb应用开发核心技术-第1部分 Php基础-2 php语言介绍
- Android中设置组件半透明和透明的效果示例
- 详解JS与APP原生控件交互
- Android开发仿映客送礼物效果
- Android中不支持动态申请权限的原因