zoukankan      html  css  js  c++  java
  • python进程池 使用Queue实现计数功能

    多进程中各个进程间相互隔离,进程间通信需要使用到通道。

    多进程中使用Queue实现进程中通信

    
    from multiprocessing import Process,Queue
    import time ,random
    
    def f(q, ):
        for i in range(10):
            n = q.get()
            n+=1
            q.put( n)
            print("计数",n)
            print('subpro',id(q))
            time.sleep(random.random())
    
    if __name__=='__main__':
        q = Queue()
        q.put(0)
        print('mainpro',id(q))
        lst = []
        for i in range(3):
            p = Process(target=f, args=(q,))  # 必须把q传进去,因为不同进程间内存是不共享的
            lst.append(p)
            p.start()
        for i in lst:
            i.join()
        print("总数",q.get())
    

    使用进程池时,使用它Queue会出错,需要使用Manager

    from multiprocessing import Pool,Manager
    import time ,random
    
    def f(q, ):
        for i in range(10):
            n = q.get()
            n+=1
            q.put( n)
            print("计数",n)
            print('subpro',id(q))
            time.sleep(random.random())
    
    if __name__=='__main__':
        q = Manager().Queue()
        q.put(0)
        print('mainpro',id(q))
        pool = Pool(8)
        for x in range(50):
            # 添加进程入进程池,注意加"_async",apply为阻塞版本,参数分别为target和args
            result = pool.apply_async(f, (q,))
        pool.close()
        pool.join()
        print("总数",q.get())
    
    
  • 相关阅读:
    【POJ1743】Musical Theme(后缀数组,二分)
    【BZOJ1031】字符加密Cipher(后缀数组)
    gui线程
    线程同步
    多线程
    java记事本
    gui界面2048小游戏
    IO流+数据库课后习题
    数据库(批处理, 事务,CachedRawSetImpl类
    java(try块语句变量,和匿名类变量生存时间
  • 原文地址:https://www.cnblogs.com/gongcheng-/p/11731083.html
Copyright © 2011-2022 走看看