Python多进程共享全局变量之Manager()详解
在Python中,多进程编程是一种常见的并发编程方式。然而,由于多进程之间的内存是相互独立的,因此默认情况下无法直接共享全局变量。为了解决这个问题,Python提供了Manager()
类,它可以创建一个共享的命名空间,使多个进程可以访问和修改其中的变量。
使用Manager()创建共享变量
首先,我们需要导入multiprocessing
模块,并创建一个Manager
对象:
import multiprocessing as mp
manager = mp.Manager()
然后,我们可以使用Manager
对象的方法来创建共享变量。常用的方法有:
list()
:创建共享列表dict()
:创建共享字典Value()
:创建共享值Array()
:创建共享数组
下面是一个示例,展示如何使用Manager
创建共享列表和共享字典:
shared_list = manager.list([1, 2, 3, 4, 5])
shared_dict = manager.dict({'a': 1, 'b': 2, 'c': 3})
示例1:使用共享列表
接下来,我们将演示如何在多个进程中使用共享列表。
import multiprocessing as mp
def worker(shared_list):
shared_list.append(6)
print(f\"Worker: {shared_list}\")
if __name__ == '__main__':
manager = mp.Manager()
shared_list = manager.list([1, 2, 3, 4, 5])
processes = []
for _ in range(2):
p = mp.Process(target=worker, args=(shared_list,))
p.start()
processes.append(p)
for p in processes:
p.join()
print(f\"Main: {shared_list}\")
在这个示例中,我们定义了一个worker
函数,它接受一个共享列表作为参数,并向其中添加一个元素。然后,我们创建了两个进程,每个进程都调用worker
函数,并传入共享列表。最后,我们在主进程中打印共享列表的值。
运行这段代码,你会看到输出类似于:
Worker: [1, 2, 3, 4, 5, 6]
Worker: [1, 2, 3, 4, 5, 6]
Main: [1, 2, 3, 4, 5, 6]
可以看到,两个进程都成功地修改了共享列表,并且主进程也能够看到这些修改。
示例2:使用共享字典
下面是一个使用共享字典的示例:
import multiprocessing as mp
def worker(shared_dict):
shared_dict['d'] = 4
print(f\"Worker: {shared_dict}\")
if __name__ == '__main__':
manager = mp.Manager()
shared_dict = manager.dict({'a': 1, 'b': 2, 'c': 3})
processes = []
for _ in range(2):
p = mp.Process(target=worker, args=(shared_dict,))
p.start()
processes.append(p)
for p in processes:
p.join()
print(f\"Main: {shared_dict}\")
在这个示例中,我们定义了一个worker
函数,它接受一个共享字典作为参数,并向其中添加一个键值对。然后,我们创建了两个进程,每个进程都调用worker
函数,并传入共享字典。最后,我们在主进程中打印共享字典的值。
运行这段代码,你会看到输出类似于:
Worker: {'a': 1, 'b': 2, 'c': 3, 'd': 4}
Worker: {'a': 1, 'b': 2, 'c': 3, 'd': 4}
Main: {'a': 1, 'b': 2, 'c': 3, 'd': 4}
可以看到,两个进程都成功地修改了共享字典,并且主进程也能够看到这些修改。
总结
通过使用Manager()
类,我们可以在多个进程之间共享全局变量。我们可以使用list()
、dict()
、Value()
和Array()
等方法创建共享变量,并在多个进程中进行读写操作。这为我们提供了一种方便的方式来实现多进程之间的数据共享。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python 多进程共享全局变量之Manager()详解 - Python技术站