Python通过Manager
方式实现多个无关联进程共享数据的实现方法如下:
准备工作
首先需要导入multiprocessing
模块,从中获取Manager
类。
import multiprocessing
# 获取Manager类
manager = multiprocessing.Manager()
使用Manager创建共享变量
在获取了Manager
类之后,我们可以使用Manager
实例创建一个共享变量。
# 创建一个共享列表
shared_list = manager.list()
# 向共享列表中添加元素
shared_list.append(1)
shared_list.append(2)
该shared_list
即为多个进程中共享的变量。
在进程中使用共享变量
要在多个进程中使用共享变量,首先需要生成多个进程。这里以生成两个进程为例。
# 定义进程函数
def func(shared_list):
shared_list.append(3)
# 生成两个进程,并将共享列表作为参数传入进程中
p1 = multiprocessing.Process(target=func, args=(shared_list,))
p2 = multiprocessing.Process(target=func, args=(shared_list,))
在进程函数中,我们可以通过直接修改共享列表的方式,实现多个进程间的数据共享。
运行并输出结果
最后,启动并运行两个进程,并输出共享列表的内容。
# 启动两个进程
p1.start()
p2.start()
# 等待两个进程运行结束
p1.join()
p2.join()
# 输出共享列表的内容
print(shared_list)
运行上述代码后,输出结果为[1, 2, 3, 3]
,表示两个进程均向共享列表中添加了元素3。
示例1:进程池中共享数据
import multiprocessing
# 获取Manager类
manager = multiprocessing.Manager()
# 创建一个共享列表
shared_list = manager.list()
# 定义进程函数
def func(i):
shared_list.append(i)
# 创建进程池
pool = multiprocessing.Pool(processes=2)
# 向进程池中添加任务
for i in range(10):
pool.apply(func, (i,))
# 关闭进程池
pool.close()
# 等待进程池运行结束
pool.join()
# 输出共享列表的内容
print(shared_list)
在上述示例中,我们使用多进程池的方式创建了2个进程,并向进程池中添加10个任务。在任务函数中,我们向共享列表中添加了参数i的值。最后,运行完所有任务,输出共享列表即可看到每个进程添加的值。
示例2:多个进程间共享字典
import multiprocessing
# 获取Manager类
manager = multiprocessing.Manager()
# 创建一个共享字典
shared_dict = manager.dict()
# 定义进程函数
def func(key, value):
shared_dict[key] = value
# 生成两个进程
p1 = multiprocessing.Process(target=func, args=('a', 1))
p2 = multiprocessing.Process(target=func, args=('b', 2))
# 启动两个进程
p1.start()
p2.start()
# 等待两个进程运行结束
p1.join()
p2.join()
# 输出共享字典的内容
print(shared_dict)
在上述示例中,我们创建了一个共享字典,并向其中添加了两个键值对。在进程函数中,我们通过操作共享字典,向字典中添加了键值对。最终输出共享字典的内容。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python通过Manager方式实现多个无关联进程共享数据的实现 - Python技术站