python多进程共享全局变量
时间: 2023-08-25 13:05:47 浏览: 48
在Python中,多进程之间不能直接共享全局变量,因为每个进程都有自己的地址空间。但是可以通过一些方式实现进程之间的全局变量共享,例如使用共享内存、队列等。
下面是使用共享内存实现多进程共享全局变量的例子:
```python
import multiprocessing as mp
# 创建共享内存变量
value = mp.Value('i', 0)
def worker(num):
global value
for i in range(100):
with value.get_lock():
value.value += num
if __name__ == '__main__':
# 创建两个进程
p1 = mp.Process(target=worker, args=(1,))
p2 = mp.Process(target=worker, args=(2,))
p1.start()
p2.start()
p1.join()
p2.join()
print(value.value) # 输出结果为 300
```
在上面的例子中,我们使用了 `mp.Value()` 函数创建了一个共享内存变量 `value`,并指定其类型为整数型。在进程 `worker()` 中,我们使用 `with value.get_lock():` 语句来获取共享内存变量的锁,以避免多个进程同时修改变量导致的数据混乱。最后,在主进程中输出共享内存变量的值,可以看到输出结果为 300。
需要注意的是,共享内存变量只能是一些基本类型,例如整型、浮点型、布尔型等。如果要共享复杂的数据结构,例如列表、字典等,可以使用 `mp.Array()` 或 `mp.Manager()` 来创建共享内存对象。同时,在使用共享内存时一定要注意数据的同步问题,否则会导致程序出现不可预料的错误。