zoukankan      html  css  js  c++  java
  • 基于队列实现生产者消费者(Python)

    # 进城之间数据隔离
    # 进程之间通信(IPC) Inter Process communication
        # 基于文件 :同一台机器上的多个进程之间通信
            # Queue 队列
                # 基于socket的文件级别的通信来完成数据传递的
        # 基于网络 :同一台机器或者多台机器上的多进程间通信
            # 第三方工具(消息中间件)
                # memcache
                # redis
                # rabbitmq
                # kafka
    
    # from multiprocessing import Queue,Process
    # def pro(q):
    #     for i in range(10):
    #         print(q.get())
    # def son(q):
    #     for i in range(10):
    #         q.put('hello%s'%i)
    #
    # if __name__ == '__main__':
    #     q = Queue()
    #     p = Process(target=son,args=(q,))
    #     p.start()
    #     p = Process(target=pro, args=(q,))
    #     p.start()
    
    # 生产者消费者模型
        # 爬虫的时候
        # 分布式操作 : celery
        # 本质 :就是让生产数据和消费数据的效率达到平衡并且最大化的效率
    # import time
    # import random
    # from multiprocessing import Queue,Process
    #
    # def consumer(q): # 消费者:通常取到数据之后还要进行某些操作
    #     for i in range(10):
    #         print(q.get())
    #
    # def producer(q): # 生产者:通常在放数据之前需要先通过某些代码来获取数据
    #     for i in range(10):
    #         time.sleep(random.random())
    #         q.put(i)
    #
    # if __name__ == '__main__':
    #     q = Queue()
    #     c1 = Process(target=consumer,args=(q,))
    #     p1 = Process(target=producer,args=(q,))
    #     c1.start()
    #     p1.start()
    
    import time
    import random
    from multiprocessing import Queue,Process
    
    def consumer(q,name): # 消费者:通常取到数据之后还要进行某些操作
        while True:
            food = q.get()
            if food:
                print('%s吃了%s'%(name,food))
            else:break
    
    def producer(q,name,food): # 生产者:通常在放数据之前需要先通过某些代码来获取数据
        for i in range(10):
            foodi = '%s%s'%(food,i)
            print('%s生产了%s'%(name,foodi))
            time.sleep(random.random())
            q.put(foodi)
    
    if __name__ == '__main__':
        q = Queue()
        c1 = Process(target=consumer,args=(q,'alex'))
        c2 = Process(target=consumer,args=(q,'alex'))
        p1 = Process(target=producer,args=(q,'大壮','泔水'))
        p2 = Process(target=producer,args=(q,'b哥','香蕉'))
        c1.start()
        c2.start()
        p1.start()
        p2.start()
        p1.join()
        p2.join()
        q.put(None)
        q.put(None)
  • 相关阅读:
    UVALive2678子序列
    UVA11549计算机谜题
    UVA11520填充正方形
    LA3635派
    UVALive3971组装电脑
    记录未完成题目
    SPOJ 6219 Edit distance字符串间编辑距离
    ACM组队安排-——杭电校赛(递推)
    逆袭指数-——杭电校赛(dfs)
    油菜花王国——杭电校赛(并查集)
  • 原文地址:https://www.cnblogs.com/sun-10387834/p/12863010.html
Copyright © 2011-2022 走看看