zoukankan      html  css  js  c++  java
  • python进程之间修改数据[Manager]与进程池[Pool]

    #前面的队列Queue和管道Pipe都是仅仅能再进程之间传递数据,但是不能修改数据,今天我们学习的东西就可以在进程之间同时修改一份数据
    #Mnager就可以实现
    import multiprocessing
    import random
    def f(l,n):
        l.append(n)
    
    if __name__ == '__main__':
        m = multiprocessing.Manager()
        m_dict = m.dict()
        m_list = m.list(range(4))
        p_list = []
        for i in range(10):
            p = multiprocessing.Process(target=f,args=(m_list,i))
            p.start()
            p_list.append(p)
        for p in p_list:
            p.join()
        print(m_list)
    

     

    结果如下

    '''
    结果如下,实现不同进程之间修改数据
    [0, 1, 2, 3, 0, 3, 1, 4, 6, 2, 8, 9, 7, 5]
    
    '''
    
    # 进程池,允许同一时间最多有多少个进程在运行,因为进程非常耗费资源
    import time
    import multiprocessing
    
    def Foo(i):
        time.sleep(2)
        return i + 100
    
    def Bar(arg):
        print("---exec down:",arg)
    
    if __name__ == '__main__':
        multiprocessing.freeze_support()
        #windows的多进程必须要加这个一项
        pool = multiprocessing.Pool(3)
        for i in range(10):
            pool.apply_async(func=Foo,args=(i,),callback=Bar)
            #这句话有3个意思
            #1、apply_async这个意思是异步执行
            #2、这里的意思执行Foo,参数为i,callback这里的意思就是Foo这个函数的返回值作为Bar的函数输入,这个是自动传递的;
            #3、这里还有一个意思是,执行Foo这个函数后,然后才执行Bar这个函数
    #4、这里我们可以在Bar这个函数中接受子进程的执行结果,我们就可以把这个结果放在一个list中,从而也可以间接获取到子进程的执行结果 print("end") pool.close() pool.join() #pool的时候必须先close,然后在join,这个必须要记住,pool的用法不一样

    结果如下

    end
    ---exec down: 100
    ---exec down: 101
    ---exec down: 102
    ---exec down: 103
    ---exec down: 104
    ---exec down: 105
    ---exec down: 106
    ---exec down: 107
    ---exec down: 108
    ---exec down: 109
    

     

  • 相关阅读:
    进程与线程
    silverlight中的几个冷门标记 {x:Null},d:DesignWidth,d:DesignHeight
    silverlight数据绑定模式TwoWay,OneWay,OneTime的研究
    silverlight 相册雏型
    IIS7的应用程序池
    silverlight如何在运行时用代码动态控制(或创建)动画
    庆祝silverlight 4 beta版发布,上几张养眼MM照片
    [转贴]Silverlight Socket 实现收发信息
    IIS7.5中神秘的ApplicationPoolIdentity
    silverlight中如何将string(字符串)写入Resource(资源)?
  • 原文地址:https://www.cnblogs.com/bainianminguo/p/7407270.html
Copyright © 2011-2022 走看看