Python进程间通信(IPC)/消息队列

进程间通信(IPC)

  1. 必要性: 进程间空间独立,资源不共享,此时在需要进程间数据传输时就需要特定的手段进行数据通信。
  2. 常用进程间通信方法----消息队列
    通信原理: 在内存中建立队列模型,进程通过队列将消息存入,或者从队列取出完成进程间通信。
  3. 实现方法
    from multiprocessing import Queue
    q = Queue(maxsize=0)
    功能: 创建队列对象
    参数:最多存放消息个数
    返回值:队列对象
    q.put(data,[block,timeout])
    功能:向队列存入消息
    参数:data 要存入的内容
    block 设置是否阻塞 False为非阻塞
    timeout 超时检测
    q.get([block,timeout])
    功能:从队列取出消息
    参数:block 设置是否阻塞 False为非阻塞
    timeout 超时检测
    返回值: 返回获取到的内容
    q.full()----------判断队列是否为满
    q.empty()------判断队列是否为空
    q.qsize()--------获取队列中消息个数
    q.close()--------关闭队列
"""
queue_test.py
消息队列演示
"""
from multiprocessing import Queue,Process
from time import sleep
from random import randint

"""
父进程中创建IO,子进程从父进程中获取IO对象,实际上
他们操作的是同一个IO,属性相互影响
如果在各自进程中创建IO对象,那么这些IO对象互相没有
任何影响
"""


# 创建消息队列
q = Queue(3)

def handle():
    while True:
        try:
            # 获取消息
            x,y = q.get(timeout=8)
        except Exception as e:
            print(e)
            break
        else:
            print("%d+%d=%d"%(x,y,x+y))

def request():
    for i in range(6):
        sleep(randint(1,16))
        x = randint(1,100)
        y = randint(1,100)
        q.put((x,y)) #存入消息

p1 = Process(target=handle)
p2 = Process(target=request)
p1.start()
p2.start()
p1.join()
p2.join()


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值