Python 多线程间共享变量较为简单,直接定义全局变量即可。但多进程之间是相互独立的执行单元,该方法不可行。
Python 标准库提供了相应的解决方案,使用较为简单。主要分为 Process 多进程和 Pool 进程池两种方式。
Process 多进程
使用 Process 定义的多进程间共享变量可直接使用 multiprocessing 模块下的 Value、Array、Queue 等。若要共享 list、dict,可使用强大的 Manager 模块。
import multiprocessing
def func(num):
# 共享数组型变量
num[2] = 9999
if __name__ == '__main__':
# 共享数组型变量
num = multiprocessing.Array('i', [1, 2, 3, 4, 5])
print(num[:])
p = multiprocessing.Process(target=func, args=(num,))
p.start()
p.join()
# 共享数组型变量
print(num[:])
Pool 进程池
进程池之间共享变量不能使用上文方式,因为进程池内进程关系并非父子进程。想要共享,必须使用 Manager 模块来定义。
from multiprocessing import Pool, Manager
def func(my_list, my_dict):
my_list.append(10)
my_list.append(11)
my_dict['a'] = 1
my_dict['b'] = 2
if __name__ == '__main__':
manager = Manager()
my_list = manager.list()
my_dict = manager.dict()
pool = Pool(processes=2)
for i in range(0, ):
pool.apply_async(func, (my_list, my_dict))
pool.close()
pool.join()
(my_list)
(my_dict)

