Python 多线程之间共享变量很简单,直接定义全局 global 变量即可。而多进程之间是相互独立的执行单元,这种方法就不可行了。
不过 Python 标准库已经给我们提供了这样的能力,使用起来也很简单。但要分两种情况来看,一种是 Process 多进程,一种是 Pool 进程池的方式。下面来说Process多进程的共享方式
在多进程情况下,由于每个进程有自己独立的内存空间,怎样能实现内存共享呢?multiprocessing模块提供了Value, Array,这两个是函数
Array:
#!/usr/bin/python
# -*- coding: utf-8 -*-
import multiprocessing
def func(num):
# 共享数组型变量
num[2] = 9999
if __name__ == '__main__':
# 共享数组型变量
num = multiprocessing.Array('i', [1, 2, 3, 4, 5, 6])
print(num[:]) #[1, 2, 3, 4, 5, 6]
p = multiprocessing.Process(target=func, args=(num,))
p.start()
p.join()
# 共享数组型变量
print(num[:]) #[1, 2, 9999, 4, 5, 6]
Value:# 共享数值型变量 multiprocessing.Value(typecode_or_type, *args[,lock])
def func(num):
# 共享数值型变量
num.value = 2
if __name__ == '__main__':
# 共享数值型变量
num = multiprocessing.Value('d', 1) #Value('h', 1) 整形
print(num.value) #1.0
p = multiprocessing.Process(target=func, args=(num,))
p.start()
p.join()
# 共享数值型变量
print(num.value) #2.0
对于共享整数或者单个字符,初始化比较简单,参照下图映射关系: