Python基础系列Python深入学习

python进程间通信之消息队列

2019-08-22  本文已影响2人  还请指教

队列和进程间通信

队列是一种数据结构,他的特点是FIFO(First In First Out),即先进先出,后进后出;这个特点就很适合消息传递,先发出的消息可以最先得到接收,保证通信的即时性,有效性。

代码|注释

from multiprocessing import Process,Queue
from time import sleep

def eatBread(q,name,breadNum,speed):  #参赛者:吃面包函数(只管吃面包)
    for i in range(breadNum):
        sleep(speed)  #吃面包需要时间(模拟)
        print("{}吃了一个面包".format(name))
        q.put(1)  #吃过一个就进队列一个1,传出信息

def celebrateAndCout(q,name):  #裁判或一旁加油庆祝的人:庆祝和计数函数
    num = 0
    while True:
        try:
            num += q.get(timeout = 5)  #接收消息,没有消息就会在这儿阻塞
            if num%2 == 0:
                print("celebrate:{}吃完了第{}个面包,继续加油哦!".format(name,num))
            else:
                print("celebrate:{}吃完了第{}个面包,真棒!".format(name,num))
        except:
            print("celebrate:{}总共吃完了{}个面包,他赢了!".format(name,num))
            break

if __name__ == '__main__':
    name = input("请输入参赛者姓名:")
    breadNum = eval(input("参赛最多能吃几个面包:"))
    speed = eval(input("参赛者多少秒吃一个面包:"))
    q = Queue(30) #定义一个容量为30的队列
    p1 = Process(target = eatBread,args=(q,name,breadNum,speed)) #创建进程对象1
    p2 = Process(target = celebrateAndCout,args=(q,name)) #创建进程对象2
    p1.start() #开始进程1
    p2.start() #马上开始进程2
    p1.join()
    p2.join()

运行结果

上一篇下一篇

猜你喜欢

热点阅读