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.概念 生产者消费者模式就是通过一个容器来解决生产者和消费者的强耦合问题.生产者和消费者彼此之间不直接通讯,而通过阻塞队列来进行通讯,所以生产者生产完数据之后不用等待消费者处理,直接扔给阻塞队列,消 ...
随机推荐
- Linux 创建用户 限制SFTP用户只能访问某个目录
Linux 限制SFTP用户只能访问某个目录 1. 新建用户并设置密码 > useradd suser > passwd suser // 输入密码 2. 设置sshd配置文件 > ...
- streaming窗口操作
之前一直对窗口操作不太理解.认为spark streaming本身已经是分片计算,还需要窗口操作干啥. 窗口操作最为简单易懂的场景就是,在M时间间隔计算一次N时间内的热搜.当M=N的时候,就像上述所说 ...
- vue element-ui怎样提炼一个自己写的js当作公共js
vue element-ui怎样提炼一个自己写的js当作公共js请教一下各位大神,我刚刚触摸vue element-ui几天,写的一个清晰检索的input框,现在需当作项目公共的部分,可遭需的html ...
- 矩形覆盖(python)
题目描述 我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形.请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法? # -*- coding:utf-8 -*- class S ...
- ansible1
前期工作: 第一步:下载epel源 wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo 第二步: ...
- 【转】 mysql 数据优化
数据库优化离不开索引,如何理解索引? ---------------------------------------------------------------------------- 可以参考 ...
- Shell教程 之test命令
Shell中的 test 命令用于检查某个条件是否成立,它可以进行数值.字符和文件三个方面的测试. 1.数字测试 参数 说明 -eq 等于则为真 -ne 不等于则为真 -gt 大于则为真 -ge 大于 ...
- 对于装office 365时,visio不兼容的解决
先将office 365装好,之后从这个网址下载visio安装即可,但是没有 激活码,需要自己激活: 网址:链接: https://pan.baidu.com/s/1OqONPuJ0eumrpts-X ...
- RocketMQ-quickstart(批量消费)
一.专业术语 Producer 消费生产者,负责产生消息,一般由业务系统负责产生消息 Consumer 消息消费者,负责消费消息,一般是后台系统负责异步消费 Push Consumer Consume ...
- SOA与微服务的区别
乍一看: 1.SOA更抽象. 2. SOA是拆分服务后,用ECS等手段,将服务组合调度. 微服务则是拆分服务后组合成各种业务. https://blog.csdn.net/HeatDeath/arti ...