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

   对于共享整数或者单个字符,初始化比较简单,参照下图映射关系:

python多进程共享全局变量 python 多进程共享_python多进程共享全局变量