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()
    不将就
  • 相关阅读:
    ini_set /ini_get函数功能-----PHP
    【转】那个什么都懂的家伙
    word 2007为不同页插入不同页眉页脚
    August 26th 2017 Week 34th Saturday
    【2017-11-08】Linux与openCV:opencv版本查看及库文件位置等
    August 25th 2017 Week 34th Friday
    August 24th 2017 Week 34th Thursday
    August 23rd 2017 Week 34th Wednesday
    August 22nd 2017 Week 34th Tuesday
    August 21st 2017 Week 34th Monday
  • 原文地址:https://www.cnblogs.com/nq31/p/13679184.html
Copyright © 2011-2022 走看看