Python写共享内存
时间: 2023-08-27 15:03:56 浏览: 129
在Python中,可以使用第三方库multiprocessing提供的Value和Array来实现共享内存。
1. 使用Value:
```
from multiprocessing import Process, Value
def increment(counter):
counter.value += 1
if __name__ == '__main__':
counter = Value('i', 0)
processes = []
for _ in range(10):
p = Process(target=increment, args=(counter,))
p.start()
processes.append(p)
for p in processes:
p.join()
print('Counter:', counter.value)
```
上述代码中,我们创建了一个整型的共享内存变量counter,初始值为0。然后创建了10个进程,每个进程都调用increment函数,对counter进行加1操作。最后,等待所有进程执行完毕,并打印最终的counter值。
2. 使用Array:
```
from multiprocessing import Process, Array
def increment(arr, index):
arr[index] += 1
if __name__ == '__main__':
counter = Array('i', [0]*10)
processes = []
for i in range(10):
p = Process(target=increment, args=(counter, i))
p.start()
processes.append(p)
for p in processes:
p.join()
print('Counter:', list(counter))
```
上述代码中,我们创建了一个整型数组的共享内存变量counter,初始值为[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]。然后创建了10个进程,每个进程都调用increment函数,对counter的某个索引位置进行加1操作。最后,等待所有进程执行完毕,并打印最终的counter值。
需要注意的是,这些共享内存变量只能是一些基本数据类型(如整型、浮点型等)或者一维数组,不能是复杂的对象。另外,由于共享内存的特性,需要在操作共享内存时进行适当的同步和互斥控制,以防止数据的不一致性或冲突。
阅读全文