Queue 实现进程通信

Queue 类是 multiprocessing模块中的函数,通过这种方式来实现进程之间的通信,就是使用了操作系统给开辟的一个队列空间,各个进程可以把数据放到该队列中,当然也可以从队列中把自己需要的信息取走。

导入模块

import time
from multiprocessing import Process,Queue
import os

创建两个进程,一个读,一个写

负责写的进程

class WriteProcess(Process):

    def __init__(self,xname,mq):
        Process.__init__(self)
        self.name = xname
        self.mq = mq

    def run(self):
        # 把多条数据写入到队列中
        print("进程的名字:%s,ID:%s;已经启动"%(self.name,os.getpid()))        # getpid() 获取进程识别码
        for i in range(1,6):
            self.mq.put(i)  # write 进程负责把数据写入Queue
            time.sleep(1) # 休眠一秒钟
        print("进程的名字:%s,ID:%s;已经结束"%(self.name,os.getpid()))

负责读的进程

class ReadProcess(Process):

    def __init__(self, xname, mq):
        Process.__init__(self)
        self.name = xname
        self.mq = mq

    def run(self):
        print("进程的名字:%s,ID:%s;已经启动" % (self.name, os.getpid()))
        while True:
            # get 函数是一个阻塞的函数
            value = self.mq.get(True)   # 当队列中没有数据,该行代码一直阻塞着
            print(value)

        # 不会执行的代码
        print("进程的名字:%s,ID:%s;已经结束" % (self.name, os.getpid()))

创建并启动连个进程

if __name__ == '__main__':
    q = Queue()
    pw = WriteProcess('write',q)
    pr = ReadProcess('read',q)

    # 启动两个进程
    pw.start()
    pr.start()

    # 让父进程等待子进程结束
    pw.join()
    # pr进程是一个死循环
    pr.terminate()  # 强制杀死进程
    print("父进程结束")

运行结果
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值