python--线程锁,队列
#线程数据安全处理--同步锁
import time
def sub():
global num print("ok")
lock.acquire()#获取这把锁--->只有一个线程被执行,不允许cpu切换,必须执行完这个线程 trmp=num
time.sleep(0.01)###串行处理
num=trmp-1
print(num)
lock.release()#释放这把锁 num=100 import threading l=[] lock=threading.Lock()#线程锁 for i in range(100):
t=threading.Thread(target=sub)
l.append(t)
t.start() for t in l:
t.join() print(num)
#递归锁
import threading,time
#递归锁
class Mythread(threading.Thread):
def actionA(self):
R_LOCK.acquire()#count=1
print(self.name,"gotA",time.ctime())
time.sleep(2)
R_LOCK.acquire()#count=2
print(self.name, "gotB", time.ctime())
time.sleep(1)
R_LOCK.release()#count=1
R_LOCK.release()#count=0
def actionB(self):
R_LOCK.acquire()
print(self.name, "gotB", time.ctime())
time.sleep(2)
R_LOCK.acquire()
print(self.name, "gotA", time.ctime())
time.sleep(1)
R_LOCK.release()
R_LOCK.release()
def run(self):
self.actionA()
self.actionB()
if __name__=="__main__":
# A=threading.Lock()
# B=threading.Lock()
R_LOCK=threading.RLock()#递归锁
l=[]
for i in range(5):
t=Mythread()
t.start()
l.append(t)
for i in l:
i.join()
print("ending")
#队列,线程间数据的安全
import queue #线程 队列 #默认先进先出-->FIFO 队列用于解决线程安全,线程通信 q=queue.Queue(3)#存放参数数据限制
q.put(12)
q.put("")
q.put({"name":"alex"})#放入数据,数据已满时阻塞
print(q.qsize())#队列存储大小
print(q.empty())#是否为空
print(q.full())#是否已满 # q.put(22,False)当put的参数超过指定存放的参数时报错 while 1:
data=q.get()#获取数据,数据为空时等待,阻塞
print(data)
print("----------------") #---先进后出,后进先出 # import queue
#
# q=queue.LifoQueue()
# q.put(12)
# q.put("hello")
# q.put({"name":"yuan"})
#
# while True:
# data=q.get()
# print(data)
# print("-------------------") #数字优先级
# import queue
#
# q=queue.PriorityQueue()
# q.put([1,12])
# q.put([2,"hello"])
# q.put([4,{"name":"yuan"}])
#
# while True:
# data=q.get()
# print(data[1])
# print("-------------------")
#
#生产者消费者模型
import time,random
import queue,threading q=queue.Queue()#线程共用全局队列q def Producer(name):
count=0
while count<10:
print("making")
# time.sleep(5)
q.put(count)
print("Producer %s has product %s baozi"%(name,count))
count+=1
# q.task_done()#告诉队列数据已经发送或获取
q.join()
print("ok") def Consumer(name):
count=0
while count<10:
time.sleep(random.randrange(4))
print("waitting")
# if not q.empty():
# q.join()#q.join 接受q.task_done的信号,如果没有发送,join则阻塞
data=q.get()
time.sleep(4)
q.task_done()
# print(data)
print("Consumer %s has eat %s baozi "%(name,data))
# else:
# print("包子不够了")
count +=1 p1=threading.Thread(target=Producer,args=('A军',))
p2=threading.Thread(target=Consumer,args=("B君",))
c3=threading.Thread(target=Consumer,args=("C君",))
c4=threading.Thread(target=Consumer,args=("D君",)) p1.start()
p2.start()
c3.start()
c4.start()
python--线程锁,队列的更多相关文章
- python线程,进程,队列和缓存
一.线程 threading用于提供线程相关的操作,线程是应用程序中工作的最小单元. 创建线程的两种方式1.threading.Thread import threading def f1(arg): ...
- python线程锁
import time,threading balance = 0 lock = threading.Lock() def change_it(n): global balance balance = ...
- Python线程优先级队列(Queue)
Python的Queue模块中提供了同步的.线程安全的队列类,包括FIFO(先入先出)队列Queue,LIFO(后入先出)队列 LifoQueue,和优先级队列PriorityQueue.这些队列都实 ...
- [python] 线程锁
参考:http://blog.csdn.net/kobeyan/article/details/44039831 1. 锁的概念 在python中,存在GIL,也就是全局解释器锁,能够保证同一时刻只有 ...
- python之锁, 队列
进程的其他方法 进程id,进程名字,查看进程是否活着is_alive() terminate()发送结束进程的信号 import time import os from multiprocessin ...
- python之网络编程--锁、信号量、线程、队列
一.线程,可以发现顺序执行比开线程执行时间要短.原因是,一个进程中的多线程处理,由于存在GIL,并且GIL中只能存在一个线程,加上线程又存在切换的问题,所以时间耗得多.想要解决这个问题,是开几个进程, ...
- 进击的Python【第九章】:paramiko模块、线程与进程、各种线程锁、queue队列、生产者消费者模型
一.paramiko模块 他是什么东西? paramiko模块是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接. 先来个实例: import param ...
- python并发编程-多线程实现服务端并发-GIL全局解释器锁-验证python多线程是否有用-死锁-递归锁-信号量-Event事件-线程结合队列-03
目录 结合多线程实现服务端并发(不用socketserver模块) 服务端代码 客户端代码 CIL全局解释器锁****** 可能被问到的两个判断 与普通互斥锁的区别 验证python的多线程是否有用需 ...
- day9---多线程,线程锁,队列
进程.线程 http://www.ruanyifeng.com/blog/2013/04/processes_and_threads.html 使用threading模块实现多线程编程[综述] Pyt ...
- python_way ,day11 线程,怎么写一个多线程?,队列,生产者消费者模型,线程锁,缓存(memcache,redis)
python11 1.多线程原理 2.怎么写一个多线程? 3.队列 4.生产者消费者模型 5.线程锁 6.缓存 memcache redis 多线程原理 def f1(arg) print(arg) ...
随机推荐
- (转载)FM 算法
(转载)FM算法 https://zhuanlan.zhihu.com/p/33184179
- jenkins不展示set Build Description Setter插件
问题描述: 1.jenkins 已下载 set build descripteion ,并且配置过,可以在构建历史中展示就用二维码 2.问题:构建历史中不展示二维码了,如图: 总是排查: 1.首先想到 ...
- hibernate 配置+注释
Hibernate配置属性 属性名 用途 hibernate.dialect 一个Hibernate Dialect类名允许Hibernate针对特定的关系数据库生成优化的SQL. 取值 full.c ...
- 自建 CA 中心并签发 CA 证书
目录 文章目录 目录 CA 认证原理浅析 基本概念 PKI CA 认证中心(证书签发) X.509 标准 证书 证书的签发过程 自建 CA 签发证书并认证 HTTPS 网站的过程 使用 OpenSSL ...
- HTML真是好东西!
HTML真是好东西! 学习HTML已经两天了,别小看这两天哦,这短短的两天估计要比学校的四周还要长.不仅有教学,还有同学与老师之间的交流,最重要的是自己上机实践的过程.在这个过程中,不仅知道了在HTM ...
- js实现上传文件实时显示缩略图
<input name="coverImage" onClick="" onchange="setImagePreview(this);&quo ...
- 【Java安全】关于Java中常用加密/解密方法的实现
安全问题已经成为一个越来越重要的问题,在Java中如何对重要数据进行加密解密是本文的主要内容. 一.常用的加密/解密算法 1.Base64 严格来说Base64并不是一种加密/解密算法,而是一种编码方 ...
- MySQL单列索引和组合索引的创建及区别介绍
MySQL单列索引是我们使用MySQL数据库中经常会见到的,MySQL单列索引和组合索引的区别可能有很多人还不是十分的了解,下面就为您分析两者的主要区别,供您参考学习. 为了形象地对比两者,再建一个表 ...
- hibernate 2 一对多、多对一 双向映射
多对一或一对多中,在多的一方维护关系效率高 一:java实体类 1.Classes.java package cn.gs.ly.school.entity; import java.util.Set; ...
- 批处理文件将多台连接的手机安装同一个APP
:adb devices > C:\Users\aaminaxu\Desktop\a.txt :1.首先获取连接到电脑的手机的设备信息将其保存到C盘的a.txt文件中::2.将保存的txt文件中 ...