day34 GIL锁 线程队列 线程池
一、Gil锁(Global Interpreter Lock)
python全局解释器锁,有了这个锁的存在,python解释器在同一时间内只能让一个进程中的一个线程去执行,这样python的多线程就无法利用多核优势,但是这并不是python语言本身的缺点,是解释器的缺点,这个问题只存在于Cpython解释其中,像Jpython就没有。但是Cpthon是python官方解释器(算目前运行效率最高的吧),所以多数人都以为Gil锁是python语言的弊端。
#GIL锁图解

过程解释:
1、加载python解释器代码
2、加载自己的py文件
3、py文件作为参数传给解释器(因为有GIL锁,一次只能一个线程进入)
4、解释器将py文件编译成.pyc字节码文件
5、解释器通过虚拟机将字节码文件转为二进制文件
6、二进制文件等待cpu调用
二、线程队列
import queue
线程队列有三种形式
1、先进先出
q = queue.Queue(3) 创建一个长度为3的队列,先进先出
q.put()
q.get()
q.size() #当前队列中有多少个元素
2、后进先出
q = queue.LifoQueue(3) 创建一个长度为3的后进先出队列
3、优先级队列
q = queue.PriorityQueue(3) 创建一个长度为3的优先级队列
import queue
# q = queue.Queue()
# q =queue.LifoQueue()
q = queue.PriorityQueue() #优先级队列
# put里是一个元组,元组的一个元素代表优先级(通常是数字,也可以是非数字,数字越小,优先级越高),第二个元素是存入队列中的值
#一个队列中,优先级必须是同一种数据类型,才能比较,否则会报错
# 如果优先级相同,那么按照后面值的ASCII码的顺序来排序
#优先级相同的数据,他们后面的值必须是相同的数据类型才能比较,但优先级相同的两个字典无法比较 # q.put((-1,'ca')) #优先级相同的两个字符串,逐个比较ASCII码值
# q.put((-1,'cb')) # q.put(("a","d")) #优先级为非数值类型
# q.put(('b',"c")) # q.put((1,{1:'hh',2:'ss'})) #优先级相同的两个字典,无法比较,报错
# q.put((1,{3:'dd',4:'jj'})) q.put((2,(4,5))) #优先级相同的元组,逐个比较元组元素值
q.put((2,(4,4))) print(q.get())
print(q.get())
优先级队列详解
三、concurrent.futures模块
通过这个模块可以创建和使用线程池和进程池
格式
from concurrent.futures import ThreadPoolExecutor, ProcessPoolExecutor
t = ThreadPoolExecutor(max_workers=4) #创建一个线程池对象,容量为4
方法:
t.submit(fun,*args,*kwargs) #异步提交任务
res= t.submit(fun,*args,*kwargs) #返回值是一个对象
res.result() #从对象中取值,会等待任务的执行结果,等不到是阻塞
t.shutdown) #等待已提交任务完成,相当于close()和join()的效果
t.map(fun, iter) #异步提交任务
res = t.map(fun, iter) #返回结果是一个生成器对象
for el in res: #取值
print(el)
add_done_callback(fun2) #添加回调函数
t.submit(fun1,参数).add_don_callback(fun2) #调用回调函数语法
day34 GIL锁 线程队列 线程池的更多相关文章
- python并发编程之线程剩余内容(线程队列,线程池)及协程
1. 线程的其他方法 import threading import time from threading import Thread,current_thread def f1(n): time. ...
- day33 GIL锁 线程队列 线程池
1. 全局解释器锁GIL Python代码的执行由Python虚拟机(也叫解释器主循环)来控制.Python在设计之初就考虑到要在主循环中,同时只有一个线程在执行.虽然 Python 解释器中可 ...
- Python 线程----线程方法,线程事件,线程队列,线程池,GIL锁,协程,Greenlet
主要内容: 线程的一些其他方法 线程事件 线程队列 线程池 GIL锁 协程 Greenlet Gevent 一. 线程(threading)的一些其他方法 from threading import ...
- GIL锁和进程/线程池
GIL锁 1.GIL锁 全局解释器锁,就是一个把互斥锁,将并发变成串行,同一时刻只能有一个线程使用共享资源,牺牲效率,保证数据安全,也让程序员避免自己一个个加锁,减轻开发负担 带来的问题 感觉单核处理 ...
- python全栈开发 * 线程队列 线程池 协程 * 180731
一.线程队列 队列:1.Queue 先进先出 自带锁 数据安全 from queue import Queue from multiprocessing import Queue (IPC队列)2.L ...
- day 34 线程队列 线程池 协程 Greenlet \Gevent 模块
1 线程的其他方法 threading.current_thread().getName() 查询当前线程对象的名字 threading.current_thread().ident ...
- day35:线程队列&进程池和线程池&回调函数&协程
目录 1.线程队列 2.进程池和线程池 3.回调函数 4.协程:线程的具体实现 5.利用协程爬取数据 线程队列 1.线程队列的基本方法 put 存 get 取 put_nowait 存,超出了队列长度 ...
- Day9 进程同步锁 进程队列 进程池 生产消费模型 进程池 paramike模块
进程同步锁: 当运行程序的时候,有可能你的程序同时开多个进程,开进程的时候会将多个执行结果打印出来,这样的话打印的信息都是错乱的,怎么保证打印信息是有序的呢? 其实也就是相当于让进程独享资源. fro ...
- GIL全局解释器锁、死锁、递归锁、线程队列
目录 GIL全局解释锁 多线程的作用 测试计算密集型 IO密集型 死锁现象 递归锁 信号量(了解) 线程队列 GIL全局解释锁 GIL本质上是一个互斥锁. GIL是为了阻止同一个进程内多个进程同时执行 ...
随机推荐
- C++中的const成员函数(函数声明后加const,或称常量成员函数)用法详解
http://blog.csdn.net/gmstart/article/details/7046140 在C++的类定义里面,可以看到类似下面的定义: 01 class List { 02 priv ...
- toolbar按钮添加图标
需要toolbar关联imagelist组件,imagelist组件添加需要的图片,在toolbar新建按钮,按钮中选择相应图表.
- JDBC事务(一)
package cn.sasa.tran01; import java.sql.Connection; import java.sql.DriverManager; import java.sql.P ...
- 报错解决——xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun
一般在遇到这个问题的时候都是想用git或者svn,结果发现用不了并报错xcrun: error: invalid active developer path (/Library/Developer/C ...
- java之webservice客户端
1.新建客户端项目. 2.配置服务端的wsdl文件位置 3.添加junit的jar包. 4.编写客户端类.
- [Android] websocket客户端开发
为了能够在H5和APP都保持同一套长连接接口,因为采用websocket协议作为开发 使用的第三方库是:https://github.com/TakahikoKawasaki/nv-websocket ...
- WinSDK(菜单笔记)
- 关于var、let、const的故事
对于一门编程语言来说,变量与常量是再正常不过的两种,JavaScript是一直解释型的弱类型语言. JavaScript中变量或者常量可以用var.let.const(后两者是ES6的新特性). 1. ...
- python 装饰器(语法糖)
def login(func): def testlogin(): for i in range(3): _username="abc" ...
- oracle 11.2 asynch descriptor resize等待事件
asynch descriptor resize描述最近部分insert /*+ append */语句出现该等待时间,经查This event is set when the number of a ...