Python 进程间的数据共享
1.在使用并发设计的时候最好尽可能的避免共享数据,尤其是在使用多进程的时候。 如果你真有需要 要共享数据, multiprocessing提供了两种方式。
一种是,数据可以用Value或Array存储在一个共享内存地图里,如下:
from multiprocessing import Process,Value,Array,RLock def func(v,a): v.value = 1.2345678 for i in range(len(a)): a[i] *=2 if __name__ == '__main__': v = Value('d',0.0) a = Array('i',range(10)) p1 = Process(target=func,args=(v,a)) p2 = Process(target=func, args=(v, a)) p1.start() p1.join() p2.start() p2.join() print(v.value) print(a[:])
typecode_or_type 对应如下
‘c’: ctypes.c_char ‘u’: ctypes.c_wchar ‘b’: ctypes.c_byte ‘B’: ctypes.c_ubyte
‘h’: ctypes.c_short ‘H’: ctypes.c_ushort ‘i’: ctypes.c_int ‘I’: ctypes.c_uint
‘l’: ctypes.c_long, ‘L’: ctypes.c_ulong ‘f’: ctypes.c_float ‘d’: ctypes.c_double
2.第二种,由Manager()返回的manager提供list, dict, Namespace, Lock, RLock, Semaphore, BoundedSemaphore, Condition, Event, Barrier, Queue, Value and Array类型的支持。
from multiprocessing import Process,Manager def func(l,d): l.append(1) l.append(2) d['a']='123' d['b']='456' if __name__ == '__main__': with Manager() as manager: l = manager.list() d = manager.dict() p = Process(target=func,args=(l,d)) p.start() p.join() print(l) print(d)

浙公网安备 33010602011771号