一、互斥锁:
1.线程同步能够保证多个线程安全访问竞争资源,最简单的同步机制是引入互斥锁。
2.互斥锁为资源引入一个状态:锁定、非锁定
3.某个线程要更改共享数据是,先将其锁定。此时资源的状态为锁定,其他线程不能更改知道该
线程释放资源,将资源的状态编程"非锁定",其他的线程才能再次锁定该资源
4.互斥锁保证了每次只有一个线程进行写入操作,从而保证了多线程情况下数据的正确性。
例子:
创建锁
suo = threading.LOck()
锁定
suo.acquire()
非锁定释放
suo.release()

例子:

import threading

count = 0

def line1():
"""
函数1
:return:
"""
global count
global lock
for i in range(100000):
  lock.acquire()
  count += 1
  lock.release()

def line2():
"""
函数2
:return:
"""
global count
global lock
for i in range(100000):
  lock.acquire()
  count += 1
  lock.release()

lock = threading.Lock() # 创建锁
thread1 = threading.Thread(target=line1) # 创建线程
thread2 = threading.Thread(target=line1) # 创建线程
thread1.start() # 线程开始
thread2.start() # 线程开始
thread1.join() # 阻塞线程
thread2.join() # 阻塞线程
print(count)

二、死锁
在线程间共享多个资源的时候,如果两个线程分别占有一部分资源并且同时等待对方的资源,就会
造成死锁‘尽管死锁很少发生,但一旦发生就会造成应用的停止响应。

三、GIL 全局解释器锁:、
因为全局解释器锁的原因,保证了python在运行的时候一次只能运行一个线程,而做不到线程
的并行,一个线程执行完了才能接着执行下一线程。(线程只能并发不能并行)
我们可以使用多进程来实现程序的并行。

问题一: python单线程和多线程分别来完成工作,到底那个快?

1.io密集型:涉及到网络、磁盘io的任务都是io密集型任务,这类任务的特点是cpu消耗很少,任务的大部分的
时间都在等待io操作完成(因为io的速度远远低于cpu和内训的速度)
结论:io密集型操作,多线程比单线程要快

2.cpu密集型:cpu密集型也称为计算密集型,任务的特点是要进行大量的计算,消耗cpu资源,比如
计算圆周率、对视频进行高清解码等等,全靠cpu的运算能力
结论:cpu密集型操作,单线程比多线程要快

四、队列
1.Python的Queue模块中提供了同步的、线程安全的队列,这些队列都实现了锁原语,能够在多线程中直接
使用。可以使用队列来实现线程间的同步。
2.初始化Queue()对象时,若括号中没有指定最大可接收的消息数量,或数量为负值,那么就代表可
接受的消息数量没有上限。

队列的方法:
task_done() 在队列中每获取一个数据,就要发送一个标记
join() 判断队列中的任务是否执行完毕,如果没有执行完毕,会一直等待。
qsize() 返回当前队列包含的消息数量;
empty() 判断队列是否为空 ,返回True 或 False
full() 判断队列是否为满了 ,返回True 或 False
put() 添加队列,如果队列数据达到上限,就不能再添加。
get() 获取队列,如果队列数据为空,就不能在获取
put_nowait() 添加队列不等待
get_nowait() 获取队列不等待

1.FIFO(先入先出)队列
from queue import Queue

2.LIFO后入先出
from queue import LifoQueue

3.优先级队列 PriorityQueue
from queue import PriorityQueue

优先级队列,以优先级顺序(最低优先级)检索打开条目的队列的变体。
条目通常是表单的元组:(优先number, data)

注意:这三个模块都有上面九个方法

Python的多线程锁跟队列的更多相关文章

  1. Python进阶【第二篇】多线程、消息队列queue

    1.Python多线程.多进程 目的提高并发 1.一个应用程序,可以有多进程和多线程 2.默认:单进程,单线程 3.单进程,多线程 IO操作,不占用CPU python的多线程:IO操作,多线程提供并 ...

  2. python_way ,day11 线程,怎么写一个多线程?,队列,生产者消费者模型,线程锁,缓存(memcache,redis)

    python11 1.多线程原理 2.怎么写一个多线程? 3.队列 4.生产者消费者模型 5.线程锁 6.缓存 memcache redis 多线程原理 def f1(arg) print(arg) ...

  3. python多线程编程(6): 队列同步

    原文请看:http://www.cnblogs.com/holbrook/archive/2012/03/15/2398060.html 前面介绍了互斥锁和条件变量解决线程间的同步问题,并使用条件变量 ...

  4. [ Python - 11 ] 多线程及GIL全局锁

    1. GIL是什么? 首先需要明确的一点是GIL并不是python的特性, 它是在实现python解析器(Cpython)时所引入的一个概念. 而Cpython是大部分环境下默认的python执行环境 ...

  5. Python多线程锁

    [Python之旅]第六篇(四):Python多线程锁   python lock 多线程 多线程使用方法 多线程锁 摘要:   在多线程程序执行过程中,为什么需要给一些线程加锁以及如何加锁,下面就来 ...

  6. python GIL 全局锁,多核cpu下的多线程性能究竟如何?

    python GIL 全局锁,多核cpu下的多线程性能究竟如何?GIL全称Global Interpreter Lock GIL是什么? 首先需要明确的一点是GIL并不是Python的特性,它是在实现 ...

  7. 扯扯python的多线程的同步锁 Lock RLock Semaphore Event Condition

    我想大家都知道python的gil限制,记得刚玩python那会,知道了有pypy和Cpython这样的解释器,当时听说是很猛,也就意味肯定是突破了gil的限制,最后经过多方面测试才知道,还是那德行… ...

  8. python并发编程-进程间通信-Queue队列使用-生产者消费者模型-线程理论-创建及对象属性方法-线程互斥锁-守护线程-02

    目录 进程补充 进程通信前言 Queue队列的基本使用 通过Queue队列实现进程间通信(IPC机制) 生产者消费者模型 以做包子买包子为例实现当包子卖完了停止消费行为 线程 什么是线程 为什么要有线 ...

  9. Python并发编程03 /僵孤进程,孤儿进程、进程互斥锁,进程队列、进程之间的通信

    Python并发编程03 /僵孤进程,孤儿进程.进程互斥锁,进程队列.进程之间的通信 目录 Python并发编程03 /僵孤进程,孤儿进程.进程互斥锁,进程队列.进程之间的通信 1. 僵尸进程/孤儿进 ...

随机推荐

  1. XML--XML从入门到精通 Part 1 认识XML

    XML 指可扩展标记语言(EXtensible Markup Language) XML 是一种标记语言,很类似 HTML XML 的设计宗旨是传输数据,而非显示数据 XML 标签没有被预定义.您需要 ...

  2. CF思维联系--CodeForces -214C (拓扑排序+思维+贪心)

    ACM思维题训练集合 Furik and Rubik love playing computer games. Furik has recently found a new game that gre ...

  3. 数学--数论--Hdu 5793 A Boring Question (打表+逆元)

    There are an equation. ∑0≤k1,k2,⋯km≤n∏1⩽j<m(kj+1kj)%1000000007=? We define that (kj+1kj)=kj+1!kj! ...

  4. CodeForces - 260C

    CodeForces - 260C Little Vasya had n boxes with balls in the room. The boxes stood in a row and were ...

  5. linux多线程同步的四种方式

    1. 在并发情况下,指令执行的先后顺序由内核决定.同一个线程内部,指令按照先后顺序执行,但不同线程之间的指令很难说清楚是哪一个先执行.如果运行的结果依赖于多线程执行的顺序,那么就会形成竞争条件,每次运 ...

  6. RF(页面断言)

    一.RF中断言方式 title should be(断言title与预期指定的title内容相等) Open Browser https://www.baidu.com/ gc Title Shoul ...

  7. Jmeter简单压测之服务器监控

    此篇为最近工作需要到内容,故现在做一个总结. 最近家里电脑坏了,等待会公司空闲在编写. 文章构思中,敬请期待.......

  8. spark系列-7、spark调优

    官网说明:http://spark.apache.org/docs/2.1.1/tuning.html#data-serialization 一.JVM调优 1.1.Java虚拟机垃圾回收调优的背景 ...

  9. git&&SourceTree使用总结

    git&&sourceTree操作学习 基本操作 commit 提交 pull 更新代码 push 推送代码 fetch 抓取代码 Branch 新建分支 merge 合并代码 Sta ...

  10. Vue实现靠边悬浮球(PC端)

    我想把退出登录的按钮做成一个悬浮球的样子,带动画的那种. 实现是这个样子: 手边没有球形图.随便找一个,功能这里演示的为单机悬浮球注销登录 嗯,具体代码: <div :class="[ ...