zoukankan      html  css  js  c++  java
  • 结合Pool进程池进程,实现进程之间的通讯,稍微复杂的运用

    #进程池中的Queue
    """
    如果要用Pool创建进程,就需要multiprocessing.Manager()中的Queue()
    而不是multiprocessing.Queue()
    """
    from multiprocessing import Manager,Pool
    import os
    
    def write(q):
        print('writer启动')
        for ch in "dongge":
            q.put(ch)
        # print(q.get())
    
    def read(q):
        print('reader启动')
        for i in range(q.qsize()):
            print('reader从Queue获取消息:%s'%q.get())
    
    if __name__ == "__main__":
        print("main Process(%s) start"%os.getpid())
        #新建一个消息队列 里面可以防止无限条消息
        q = Manager().Queue()#使用Manager中的Queue来初始化
        #新建一个进程池 无限数量的进程
        po = Pool()
        po.apply(write,(q,))#先完成这个在往下进行
        print(q.qsize())
        #异步读取 只要里面没有东西就结束 有时输出不出来
        #往往在主进程结束之后再启动
        #如果是同步读取则主进程一定会在读取所有消息之后再结束
        po.apply_async(read,(q,))
    
        po.close()
        print("main Process(%s) end"%os.getpid())
    

      

  • 相关阅读:
    消息中间件
    线程以及多线程
    锁以及分布式锁
    并发以及高并发
    SpringBoot + SpringCloud学习踩坑实记
    公众号笔记: 2018年12月
    浅谈final关键字的用法
    浅谈static关键字的四种用法
    Linux常用的一些命令
    HTTPS
  • 原文地址:https://www.cnblogs.com/zhangboblogs/p/8623691.html
Copyright © 2011-2022 走看看