Python-多线程之消费者模式和GIL全局锁

# 一对多 一个大厨对多个顾客 import threading
import queue
import time q = queue.Queue(maxsize=10) #生产者
def producer(name):
count = 1
while True:
q.put("包子%d"%count)
print("生产了包子%d"%count)
count += 1
time.sleep(0.8) #消费者
def consumer(name):
count = 1
while True:
print("[%s]取到了[%s]并且吃了它。。。"%(name,q.get()))
time.sleep(2) if __name__ == '__main__':
p = threading.Thread(target=producer,args=("刘大厨",))
a = threading.Thread(target=consumer,args=("A",))
b = threading.Thread(target=consumer,args=("B",)) p.start()
a.start()
b.start()
# 多对多 多个大厨对多个顾客 import threading
import queue
import time,random
q = queue.Queue(maxsize=10)
count = 1
#生产者
def producer(name):
global count
while True: # if mutex.acquire():
# q.put("包子%d"%count)
# print("%s生产了包子%d"%(name,count))
# count += 1
# time.sleep(random.random()*10)
# mutex.release()
q.put("包子%d" % count)
print("%s生产了包子%d" % (name, count))
count += 1
time.sleep(random.random() * 10) #消费者
def consumer(name):
count = 1
while True:
print("[%s]取到了[%s]并且吃了它。。。"%(name,q.get()))
time.sleep(random.random() * 10) if __name__ == '__main__': mutex = threading.Lock() p1 = threading.Thread(target=producer,args=("刘大厨",))
p2 = threading.Thread(target=producer,args=("李大厨",)) a = threading.Thread(target=consumer,args=("A",))
b = threading.Thread(target=consumer,args=("B",))
c = threading.Thread(target=consumer,args=("C",))
d = threading.Thread(target=consumer,args=("D",)) p1.start()
p2.start()
a.start()
b.start()
c.start()
d.start()
from threading import Thread
from multiprocessing import Process import time
#计数
def two_hundred_million():
start_time = time.time()
i = 0
for _ in range(200000000):
i = i + 1
end_time = time.time()
print("Total time:{}".format(end_time - start_time)) #数1亿
def one_hundred_million():
start_time = time.time()
i = 0
for _ in range(100000000):
i = i + 1
end_time = time.time()
print("Total time:{}".format(end_time - start_time)) if __name__ == "__main__":
#单线程---主线程
#two_hundred_million() #Total time:19.491114616394043 #多线程
# for _ in range(2):
# t = Thread(target=one_hundred_million) #Total time:18.768073320388794
# t.start() #Total time:18.906081438064575 #多进程
# for _ in range(2):
# p = Process(target=one_hundred_million) #Total time:11.364650011062622
# p.start() #Total time:11.398651838302612
Python-多线程之消费者模式和GIL全局锁的更多相关文章
- python GIL 全局锁,多核cpu下的多线程性能究竟如何?
python GIL 全局锁,多核cpu下的多线程性能究竟如何?GIL全称Global Interpreter Lock GIL是什么? 首先需要明确的一点是GIL并不是Python的特性,它是在实现 ...
- [ Python - 11 ] 多线程及GIL全局锁
1. GIL是什么? 首先需要明确的一点是GIL并不是python的特性, 它是在实现python解析器(Cpython)时所引入的一个概念. 而Cpython是大部分环境下默认的python执行环境 ...
- java+反射+多线程+生产者消费者模式+读取xml(SAX)入数据库mysql-【费元星Q9715234】
java+反射+多线程+生产者消费者模式+读取xml(SAX)入数据库mysql-[费元星Q9715234] 说明如下,不懂的问题直接我[费元星Q9715234] 1.反射的意义在于不将xml tag ...
- 并发编程-线程-死锁现象-GIL全局锁-线程池
一堆锁 死锁现象 (重点) 死锁指的是某个资源被占用后,一直得不到释放,导致其他需要这个资源的线程进入阻塞状态. 产生死锁的情况 对同一把互斥锁加了多次 一个共享资源,要访问必须同时具备多把锁,但是这 ...
- python并发编程-多线程实现服务端并发-GIL全局解释器锁-验证python多线程是否有用-死锁-递归锁-信号量-Event事件-线程结合队列-03
目录 结合多线程实现服务端并发(不用socketserver模块) 服务端代码 客户端代码 CIL全局解释器锁****** 可能被问到的两个判断 与普通互斥锁的区别 验证python的多线程是否有用需 ...
- TCP并发、GIL全局锁、多线程讨论
TCP实现并发 #client客户端 import socket client = socket.socket() client.connect(('127.0.0.1',8080)) while T ...
- Java实现多线程生产者消费者模式的两种方法
生产者消费者模式:生产者和消费者在同一时间段内共用同一存储空间,生产者向空间里生产数据,而消费者取走数据.生产者生产一个,消费者消费一个,不断循环. 第一种实现方法,用BlockingQueue阻塞队 ...
- java多线程 生产者消费者模式
package de.bvb; /** * 生产者消费者模式 * 通过 wait() 和 notify() 通信方法实现 * */ public class Test1 { public static ...
- java实现多线程生产者消费者模式
1.概念 生产者消费者模式就是通过一个容器来解决生产者和消费者的强耦合问题.生产者和消费者彼此之间不直接通讯,而通过阻塞队列来进行通讯,所以生产者生产完数据之后不用等待消费者处理,直接扔给阻塞队列,消 ...
随机推荐
- python之流程控制
流程控制之if-else if 条件1: 满足条件1的情况 else if 条件2: 满足条件2的情况 if 条件2.1: 满足条件2.1的情况(if-else语句的嵌套) else if 条件2.2 ...
- MATLAB二维相机标定的解决方案 calibration
第一步,在命令行下面输入cameraCalibrator,启动MATLAB相机标定.相机矫正界面 cameraCalibrator 第二步:拍照.如果你是做相机标定,你应该知道,你需要一些calibr ...
- mongodb副本集的从库永久性设置setSlaveOk
今天在生产环境下面搭了一个mongo的副本集,但开发那边要求副本集读写分离. 坑爹的是每次上副本集的时候都要设置db.getMongo().setSlaveOk()才能访问数据.感觉很是苦逼. 后来开 ...
- eclipce连接数据库增删改查
1.在mysql中新建一个名为course的数据库,并在其中新建一个course数据表,包含四个字段,id,name,teacher,classname如图(注意:将id设为自动递增,否则后面新增会出 ...
- 1.4、CDH 搭建Hadoop在安装之前(推荐的群集主机和角色分配)
推荐的群集主机和角色分配 要点:本主题描述了Cloudera Manager管理的CDH群集的建议角色分配.您为部署选择的实际分配可能会有所不同,具体取决于工作负载的类型和数量,群集中部署的服务,硬件 ...
- java 反编译工具
(1)点击进入>> https://jingyan.baidu.com/article/3f16e003c857082590c1036f.html (备注:如果以上链接的资源不能下载, ...
- 最长公共子序列hdu1503
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1503 题意:给你两个字符串,把这两个字符串合并,使合并之后的字符串最短,并且合并之后的字符之间的相对位 ...
- JS参数转发
在没有装饰器之前不方便. 可以用Reflect.apply. cls = function f() { let obj = {}; obj.show = function(a, b) { consol ...
- Instrumentation类——Android自动化测试学习历程
这里需要把Instrumentation类的视频的上.中.下三集一起看,把内容总结一下... 视频地址: http://study.163.com/course/courseLearn.htm?cou ...
- robotium—只有apk文件的测试
把ppt的内容总结一下,并把问题说明一下: 把基本步骤搞出来,用notepad的程序吧,直接安装apk,就当做是不知道源码就好啦! 直接用自己的手机上就行啦!! 一.重签名: 步骤: 1.直接运行re ...