zoukankan      html  css  js  c++  java
  • python IPC机制和生产者与消费者(案例)

    IPC机制:进程间通信或跨进程通信,指两个进程之间进行数据交换。

    模型:生产者+媒介(队列)+消费者(用到的就是IPC机制)
    这里队列用JoinableQueue这个模块,该模块有以下几个方法:

     JoinableQueue()内有自带计数器,每当队列放一个数据的时候,会自动+1
     task_done()方法,每从队列取出一个数据的时候,会自动减1
     q.join(),当计数器为0时候才会执行

    同时:将消费者进程设置成守护进程,这样q.join()执行完毕的时候,消费者子进程也会跟着结束

    c1.daemon=True

    具体完整代码如下:

    # -*-coding:utf-8 -*-
    from multiprocessing import Process, Queue, JoinableQueue
    import time
    import random
    
    
    def productor(name, food, q):
        for i in range(1,4):
            data="%s做好了%s%s"%(name,food,i)
            # 模拟延迟
            time.sleep(random.randint(1,3))
            q.put(data)
            print(data)
    
    def customer(name, q):
        while True:
            food=q.get()
            #模拟延迟
            time.sleep(random.randint(1,3))
            print("%s吃了%s"%(name,food))
            # task_done()方法,每从队列取出一个数据的时候,会自动减1
            q.task_done()
    
    
    if __name__ == '__main__':
        #JoinableQueue()内有自带计数器,每当队列放一个数据的时候,会自动+1
        q = JoinableQueue()
        # 生产者
        p1 = Process(target=productor, args=('alex', '包子', q,))
        p2 = Process(target=productor, args=('egon', '肠粉', q,))
        # 消费者
        c1=Process(target=customer,args=('李浩', q,))
        c2 = Process(target=customer, args=('猪哥', q,))
        # 开启守护进程
        c1.daemon=True
        c2.daemon=True
        # 开启进程
        p1.start()
        p2.start()
        c1.start()
        c2.start()
        # 保证生产全部生产完
        p1.join()
        p2.join()
        # q.join(),当计数器为0时候才会执行
        q.join()
    不将就
  • 相关阅读:
    Django部署到服务器
    springboot使用Redis缓存
    ubuntu下pip更换国内源
    ubuntu环境变量文件
    python open找不到路径
    centos 8 安装nginx
    centos8 mysql8的远程访问
    centos 8 安装mysql-server 8
    今日收获
    今日收获
  • 原文地址:https://www.cnblogs.com/nq31/p/13679184.html
Copyright © 2011-2022 走看看