zoukankan      html  css  js  c++  java
  • 进程间通信

    import time
    from multiprocessing import Process, Queue, Pool, Manager, Pipe
    
    
    # def producer(queue):
    #     queue.put("a")
    #     time.sleep(2)
    #
    # def consumer(queue):
    #     time.sleep(2)
    #     data = queue.get()
    #     print(data)
    #
    # if __name__ == "__main__":
    #     queue = Queue(10)
    #     my_producer = Process(target=producer, args=(queue,))
    #     my_consumer = Process(target=consumer, args=(queue,))
    #     my_producer.start()
    #     my_consumer.start()
    #     my_producer.join()
    #     my_consumer.join()
    
    #共享全局变量通信
    #共享全局变量不能适用于多进程编程,可以适用于多线程
    
    
    # def producer(a):
    #     a += 100
    #     time.sleep(2)
    #
    # def consumer(a):
    #     time.sleep(2)
    #     print(a)
    #
    # if __name__ == "__main__":
    #     a = 1
    #     my_producer = Process(target=producer, args=(a,))
    #     my_consumer = Process(target=consumer, args=(a,))
    #     my_producer.start()
    #     my_consumer.start()
    #     my_producer.join()
    #     my_consumer.join()
    
    #multiprocessing中的queue不能用于pool进程池
    #pool中的进程间通信需要使用manager中的queue
    
    # def producer(queue):
    #     queue.put("a")
    #     time.sleep(2)
    #
    # def consumer(queue):
    #     time.sleep(2)
    #     data = queue.get()
    #     print(data)
    #
    # if __name__ == "__main__":
    #     queue = Manager().Queue(10)
    #     pool = Pool(2)
    #
    #     pool.apply_async(producer, args=(queue,))
    #     pool.apply_async(consumer, args=(queue,))
    #
    #     pool.close()
    #     pool.join()
    
    #通过pipe实现进程间通信
    #pipe的性能高于queue
    
    # def producer(pipe):
    #     pipe.send("bobby")
    #
    # def consumer(pipe):
    #     print(pipe.recv())
    #
    # if __name__ == "__main__":
    #     recevie_pipe, send_pipe = Pipe()
    #     #pipe只能适用于两个进程
    #     my_producer= Process(target=producer, args=(send_pipe, ))
    #     my_consumer = Process(target=consumer, args=(recevie_pipe,))
    #
    #     my_producer.start()
    #     my_consumer.start()
    #     my_producer.join()
    #     my_consumer.join()
    
    def add_data(p_dict, key, value):
        p_dict[key] = value
    
    if __name__ == "__main__":
        progress_dict = Manager().dict()
        from queue import PriorityQueue
    
        first_progress = Process(target=add_data, args=(progress_dict, "bobby1", 22))
        second_progress = Process(target=add_data, args=(progress_dict, "bobby2", 23))
    
        first_progress.start()
        second_progress.start()
        first_progress.join()
        second_progress.join()
    
        print(progress_dict)
  • 相关阅读:
    YARN源码学习(七)-----Task级别GC相关指标的自定义counter添加
    YARN源码学习(七)-----Task级别GC相关指标的自定义counter添加
    YARN源码分析(八)-----Reduce Shuffle过程分析
    YARN源码分析(八)-----Reduce Shuffle过程分析
    【每天一道算法题】整数循环节之和——数字黑洞6174
    getline函数
    设计模式之建造者模式Builder(创建型)
    字符串算法总结
    C++设计模式之单例模式
    Linux下C的线程同步机制
  • 原文地址:https://www.cnblogs.com/Erick-L/p/8922496.html
Copyright © 2011-2022 走看看