首页 > 其他 > 详细

(8)Queue队列

时间:2019-04-28 22:24:40      阅读:204      评论:0      收藏:0      [点我收藏+]

 

# IPC Inter-Process Communication

# 实现进程之间通信的两种机制:

# 管道 Pipe 用的很少

# 队列 Queue

队列的特征:现进先出,栈属于后进后出

基本语法:from multiprocessing import Queue

q = Queue(3) 传参数表示只允许放入3个数,不是长度,是个数

q.get() 取不到的时候会有阻塞,不会报异常,程序挂起

q.put() 存入超出范围也不会报异常

q.getnowait() 拿不到报异常

q.put_nowait() 非阻塞版本的put ,放入超出范围也会报异常

q.empty() 检测是否为空 (了解) 在一边存一边取得时候判断不准确

q.full() 检测是否已经存满 (了解) 在一边存一边取得时候判断不准确

生产者和消费者模型:

生产者和消费者模型从程序上来讲就是数据的存入和获取的过程

最为理想的生产者和消费者模型 , 两者之间的运行速度应该是同步的

from multiprocessing import Process,Queue

import time

import random

# 消费者方法 [负责取值]

def consumer(q,name):

while True:

food = q.get()

if food is None:

break

time.sleep(random.uniform(0.5,1))

print("%s吃了一个%s" % (name,food))

# 生产者方法 [负责存值]

def producer(q,name,food):

for i in range(5):

time.sleep(random.uniform(0.3,0.8))

print("%s生产了%s" % (name,food))

q.put(food+str(i))

if __name__ == "__main__":

q = Queue()

c1 = Process(target=consumer,args=(q,"陈露中"))

c2 = Process(target=consumer,args=(q,"陈根基"))

# c1.daemon = True

c1.start()

c2.start()

p1 = Process(target=producer,args=(q,"订海呀","地瓜"))

p2 = Process(target=producer,args=(q,"陈红平","黄瓜"))

p1.start()

p2.start()

 

 

(8)Queue队列

原文:https://www.cnblogs.com/lyj910313/p/10787256.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!