multiprocessing.Value(typecode_or_type, *args[, lock])。
该方法返回从共享内存中分配的一个ctypes 对象,其中typecode_or_type定义了返回的类型。它要么是一个ctypes类型,要么是一个代表ctypes类型的code。比如c_bool和’b’是同样的,因为’b’是c_bool的code。
from multiprocessing import Value,Array,Lock,Process
from threading import Event
class Base(object):
def __init__(self):
self.event = Event()
def add(self,number,add_value,lock):
lock.acquire()
try:
print ("init add{0} number = {1}".format(add_value, number.value))
for i in range(1, 6):
number.value += add_value
print ("***************add{0} has added***********".format(add_value))
self.event.wait(0.001)
print ("add{0} number = {1}".format(add_value, number.value))
except Exception as e:
raise e
finally:
lock.release()
def change(self,arr):
for i in range(len(arr)):
arr[i] = -arr[i]
class More(Base):
def __init__(self):
self.lock = Lock()
self.number = Value('i', 0)
self.arr = Array('i', [1,2,3,4])
super(More,self).__init__()
def run(self):
p1 = Process(target=self.add,args=(self.number, 1, self.lock))
p2 = Process(target=self.add,args=(self.number, 3,self.lock))
p3 = Process(target=self.change,args=(self.arr,))
p1.start()
p2.start()
p3.start()
p3.join()
print ("main end")
if __name__ == "__main__":
More().run()
服务进程
由 Manager
() 返回的管理器对象控制一个服务进程,该进程保存Python对象并允许其他进程使用代理操作它们。
Manager() 返回的管理器支持类型: list 、 dict 、 Namespace 、 Lock 、 RLock 、 Semaphore 、 BoundedSemaphore 、 Condition 、 Event 、 Barrier 、 Queue 、 Value 和 Array
from multiprocessing import Process, Manager
def f(d, l):
d[1] = '1'
d['2'] = 2
d[0.25] = None
l.reverse()
if __name__ == '__main__':
with Manager() as manager:
d = manager.dict()
l = manager.list(range(10))
p = Process(target=f, args=(d, l))
p.start()
p.join()
print(d)
print(l