Python多进程编程-进程间共享数据(Value、Array、Manager)
转载:(14条消息) Python多进程编程-进程间共享数据(Value、Array、Manager)_manager value_Loadinggggg的博客-CSDN博客
Value、Array是通过共享内存的方式共享数据
Manager是通过共享进程的方式共享数据。
Value\Array
实例代码:
import multiprocessing #Value/Array def func1(a,arr): a.value=3.14 for i in range(len(arr)): arr[i]=-arr[i] if __name__ == '__main__': num=multiprocessing.Value('d',1.0)#num=0 arr=multiprocessing.Array('i',range(10))#arr=range(10) p=multiprocessing.Process(target=func1,args=(num,arr)) p.start() p.join() print num.value print arr[:]
执行结果:
3.14
[0, -1, -2, -3, -4, -5, -6, -7, -8, -9]
Manager管理的共享数据类型有:Value、Array、dict、list、Lock、Semaphore等等,同时Manager还可以共享类的实例对象。
实例代码:
from multiprocessing import Process,Manager def func1(shareList,shareValue,shareDict,lock): with lock: shareValue.value+=1 shareDict[1]='1' shareDict[2]='2' for i in range(len(shareList)): shareList[i]+=1 if __name__ == '__main__': manager=Manager() list1=manager.list([1,2,3,4,5]) dict1=manager.dict() array1=manager.Array('i',range(10)) value1=manager.Value('i',1) lock=manager.Lock() proc=[Process(target=func1,args=(list1,value1,dict1,lock)) for i in range(20)] for p in proc: p.start() for p in proc: p.join() print(list1) print(dict1) print(array1) print(value1)
执行结果:
[21, 22, 23, 24, 25] {1: '1', 2: '2'} array('i', [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) Value('i', 21)
通过Manager进程间共享实例对象:
from multiprocessing import Process,Value,Lock from multiprocessing.managers import BaseManager class Employee(object): def __init__(self,name,salary): self.name=name self.salary=Value('i',salary) def increase(self): self.salary.value+=100 def getPay(self): return self.name+':'+str(self.salary.value) class MyManager(BaseManager): pass def Manager2(): m=MyManager() m.start() return m MyManager.register('Employee',Employee) def func1(em,lock): with lock: em.increase() if __name__ == '__main__': manager=Manager2() em=manager.Employee('zhangsan',1000) lock=Lock() proces=[Process(target=func1,args=(em,lock))for i in range(10)] for p in proces: p.start() for p in proces: p.join() print(em.getPay())
结果: zhangsan:2000
Python多进程并行操作-multiprocessing-Managers - 知乎 (zhihu.com)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)
2021-05-21 验证人员应该以何种角度阅读spec
2020-05-21 set_driving_cell set_drive set_input_transition 为设计指定输入驱动强度
2020-05-21 DC flow --2--lab1