Python--使用消息队列实现进程间通信

Python------使用Queue实现进程间通信

  1. Queue的使用
    Queue本身就是一个消息队列程序
    事例程序
#!/usr/bin/env python
# coding=utf-8

import multiprocessing 

# 初始化对象时,若括号内没有指定最大可接收的消息数量,默认最大值(内存的尽头)
q = multiprocessing.Queue(3)

q.put(1)
q.put([11,22,33])

print(q.full()) # false

q.put("sjsjsjs") 
print(q.full()) # True

#因为消息队列已满,try都会抛出异常,第一个try会等待2s再抛出异常,
#第二个try会立刻抛出异常
try:
    q.put("ssss", True, 2)
except:
    print("消息队列已满,现有消息的数量:%s" % q.qsize())

try:
    q.put_nowait("aaa")
except:
    print("消息队列已满,现有的消息数量为:%s" % q.qsize())

#先判断消息队列是否已满,再写入
if not q.full():
    q.put_nowait("ssss")

#读取信息时, 先判断消息队列是否为空,再读取
if not q.empty():
    for i in range(q.qsize()):
        print(q.get_nowait())

在这里插入图片描述
2. 父进程中创建两个子进程,一个往Queue写数据,一个从Queue读数据:

#!/usr/bin/env python
# coding=utf-8

import multiprocessing

def download_from_web(q):
    """下载数据"""
    #模拟从网上下载的数据
    data = [11, 22, 33, 44]
    
    #向队列中写数据
    for temp in data:
        q.put(temp)

    print("---下载器已经下载完了数据并其存入到队列中----")


def analysis_data(q):
    """数据处理"""
    waitting_analysis_data = list()
    #从队列中获取数据
    while True:
        data = q.get()
        waitting_analysis_data.append(data)

        if q.empty():
            break

    #模拟数据处理
    print(waitting_analysis_data)

    
def main():

    #1 .创建一个队列
    q = multiprocessing.Queue()

    #2. 创建多个进程,将队列的引用当做实参进行传递到里面
    p1 =  multiprocessing.Process(target=download_from_web, args=(q,))
    p2 =  multiprocessing.Process(target=analysis_data, args=(q,))

    p1.start()
    p2.start()

if __name__ == "__main__":
    main()

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值