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
    

     

  • 相关阅读:
    CSS hack:针对IE6,IE7,firefox显示不同效果
    让IE6支持png24透明/半透明的方法
    IE8的css hack
    jQuery Mobile笔记三
    jQuery Mobile笔记二
    js常见面试题
    CSS3-transform3D
    CSS3-transform-style
    CSS3-媒体类型
    CSS3-盒模型-resize属性
  • 原文地址:https://www.cnblogs.com/bainianminguo/p/7407270.html
Copyright © 2011-2022 走看看