python多进程manager_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这个函数

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

原文:http://www.cnblogs.com/bainianminguo/p/7407270.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值