根据测试, 共享内存的读写应该都是同步的, 不需要lock
设置:
shared_number = multiprocessing.RawValue(ctypes.c_int, 0)
获取
shared_number.value
至于共享什么type的数据, 可以网上搜一搜, 比如string是c_types.c_char_p
import multiprocessing
import random
import os
import ctypes
def func(number, _shared_number, LOCK):
with LOCK:
print os.getpid(), 'number', number
for i in xrange(0, number, 1):
# 应该是同步的
_shared_number.value += 1
print os.getpid(), _shared_number.value
if __name__ == '__main__':
process = []
shared_number = multiprocessing.RawValue(ctypes.c_int, 0)
LOCK = multiprocessing.RLock()
for i in range(4):
p = multiprocessing.Process(target=func, args=(random.randint(3, 20000), shared_number, LOCK))
process.append(p)
p.start()
for p in process:
p.join()
共享内存方式二:
import multiprocessing
def func1(dict):
dict['test'] = 1
def func2(dict):
dict['test2'] = '123'
if __name__ == '__main__':
process = []
with multiprocessing.Manager() as MG:
d = MG.dict()
p = multiprocessing.Process(target=func1, args=(d, ))
p.start()
p2 = multiprocessing.Process(target=func2, args=(d, ))
p2.start()
p.join()
p2.join()
print d