Python多进程共享变量

背景

Python多线程可以直接共享子线程外定义的变量,但是多进程不可以。子进程访问外部定义的变量时访问不到,而是会重新定义一个进程内的新变量。

multiprocessing 包本身提供了可以用来共享的变量类型,我们可以用它们来汇总子进程处理后的数据。

1
2
multiprocessing.Manager().list()
multiprocessing.Manager().dict()

共享变量使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import multiprocessing


def func(input_list, input_dict, i, k):
input_list.append(i)
input_dict[k] = i


if __name__ == '__main__':
a_list = multiprocessing.Manager().list()
a_dict = multiprocessing.Manager().dict()

pool = multiprocessing.Pool(processes=3)
pool.apply_async(func, (a_list, a_dict, 0, 'a'))
pool.apply_async(func, (a_list, a_dict, 1, 'b'))
pool.apply_async(func, (a_list, a_dict, 2, 'c'))
pool.close()
pool.join()

print(a_list)
print(a_dict)

注意:上面定义的共享list只能添加,不能修改,即可以执行append或extend,但是不能执行a[i]=8。dict没有试~

参考链接:https://blog.csdn.net/attackkk/article/details/120122635