标签:传递数据 get highlight tar 意思 资源 targe ssi []
#前面的队列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这个函数
    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
python进程之间修改数据[Manager]与进程池[Pool]
标签:传递数据 get highlight tar 意思 资源 targe ssi []
原文地址:http://www.cnblogs.com/bainianminguo/p/7407270.html