多进程共享数据:数字变量、字符串变量、列表变量、字典变量、实例对象
from multiprocessing import Process,Manager,Value from ctypes import c_char_p def f(shareDict,shareList,i,s): shareDict[1]='1' shareDict[2]=2 shareDict[0.25]=None shareList.reverse() i.value+=1 s.value=s.value+' ,over!' if __name__ == "__main__": i=Value('i',0) # 共享数字变量 m=Manager() shareDict=m.dict() # 共享字典变量 shareList=m.list(range(5)) # 共享列表变量 s=m.Value(c_char_p,'hello') # 共享字符串变量 p=Process(target=f,args=(shareDict,shareList,i,s)) p.start() p.join() print(shareList) print(shareDict) print(i.value) print(s.value)
# 共享实例对象
from multiprocessing import Process,Value,Lock class Counter(object): def __init__(self,initval=0): self.val=Value('i',initval) self.lock=Lock() def increate(self): with self.lock: self.val.value+=1 def value(self): return self.val.value def func(counter): for i in range(5): counter.increate() if __name__ =="__main__": c=Counter(0) #实例对象 procs=[Process(target=func,args=(c,)) for i in range(3)] for p in procs:p.start() for p in procs:p.join() print(c.value())