• 【10.10】进程间通信--Queue、Pipe、Manager


    利用Queue,这个Queue不是queue里面的

     1 #!/usr/bin/env python
     2 # -*- coding:utf-8 -*-
     3 
     4 from multiprocessing import Process, Queue
     5 import time
     6 
     7 
     8 def producer(queue):
     9     queue.put('a')
    10     time.sleep(2)
    11 
    12 
    13 def consumer(queue):
    14     time.sleep(2)
    15     data = queue.get()
    16     print(data)
    17 
    18 
    19 if __name__ == '__main__':
    20     queue = Queue(10)
    21     my_producer = Process(target=producer, args=(queue,))
    22     my_consumer = Process(target=consumer, args=(queue,))
    23     my_producer.start()
    24     my_consumer.start()
    25     my_producer.join()
    26     my_consumer.join()
    a
    

     共享全局变量不能适用于多进程编程,只能用于多线程编程

    multiprocessing里面的Queue不能用于pool进程池,但是multiprocessing里面有一个Manager

     1 from multiprocessing import Process, Queue, Manager, Pool
     2 import time
     3 
     4 
     5 def producer(queue):
     6     queue.put('a')
     7     time.sleep(2)
     8 
     9 
    10 def consumer(queue):
    11     time.sleep(2)
    12     data = queue.get()
    13     print(data)
    14 
    15 
    16 if __name__ == '__main__':
    17     pool = Pool(2)
    18     queue = Manager().Queue(10)
    19 
    20     pool.apply_async(producer, args=(queue,))
    21     pool.apply_async(consumer, args=(queue,))
    22 
    23     pool.close()
    24     pool.join()
    a
    

     pool中的进程间通信用manager中的Queue

    pipe

     1 # 通过pipe实现进程间通信
     2 # pipe的性能高于queue
     3 from multiprocessing import Pipe, Pool, Process
     4 import time
     5 
     6 
     7 def producer(pipe):
     8     pipe.send('zy')
     9     time.sleep(2)
    10 
    11 
    12 def consumer(pipe):
    13     print(pipe.recv())
    14 
    15 
    16 if __name__ == '__main__':
    17     pool = Pool(2)
    18     # pipe只能适用于两个进程间的通信
    19     recevie_pipe, send_pipe = Pipe()
    20     my_producer = Process(target=producer, args=(send_pipe,))
    21     my_consumer = Process(target=consumer, args=(recevie_pipe,))
    22 
    23     my_producer.start()
    24     my_consumer.start()
    25 
    26     my_producer.join()
    27     my_consumer.join()
    zy
    

    还有manager中共享的数据结构。。。

  • 相关阅读:
    数以百万计美元的融资YO是什么东东?
    工作流和审批流
    Linux makefile 教程 很具体,且易懂
    【吐槽】火车票一票难求啊
    poj 2828 Buy Tickets(树状数组 | 线段树)
    如花搞笑图片集锦(转贴)
    苹果开发人员账号注冊流程
    优秀团队建设--美国式团队(ppt)
    屏幕分辨率(QQVGA、QVGA、VGA、XGA、WXGA、WUXGA和WSXGA+)
    怎样设计接口?
  • 原文地址:https://www.cnblogs.com/zydeboke/p/11310186.html
Copyright © 2020-2023  润新知