在多进程中使用“全局”变量的模块可以通过共享内存的方式来实现。共享内存是一种将内存区域映射到多个进程地址空间的技术,使得多个进程可以访问同一块内存区域。
下面是一种常见的实现方式,使用multiprocessing模块中的Value或Array对象来创建共享内存,以实现多进程间的“全局”变量共享。
from multiprocessing import Process, Value, Array
# 在主进程中创建共享变量
shared_var = Value('i', 0)
shared_array = Array('d', [0.0, 0.0, 0.0])
def child_process1(shared_var, shared_array):
# 在子进程中修改共享变量
shared_var.value = 1
shared_array[0] = 1.1
def child_process2(shared_var, shared_array):
# 在子进程中访问共享变量
print(shared_var.value)
print(shared_array[0])
if __name__ == '__main__':
# 创建两个子进程,并传入共享变量
p1 = Process(target=child_process1, args=(shared_var, shared_array))
p2 = Process(target=child_process2, args=(shared_var, shared_array))
p1.start()
p2.start()
p1.join()
p2.join()
在上述示例中,通过Value('i', 0)创建了一个整型的共享变量shared_var,并将初始值设为0。通过Array('d', [0.0, 0.0, 0.0])创建了一个双精度浮点型的共享数组shared_array,并将初始值设为[0.0, 0.0, 0.0]。
在子进程child_process1中,可以通过shared_var.value来访问和修改共享变量的值,在本例中将其设为1。同样,可以通过shared_array[0]来访问和修改共享数组的元素。
在子进程child_process2中,可以通过shared_var.value和shared_array[0]来访问共享变量的值,打印出来的结果将与child_process1中所设置的值相同。
注意,使用共享内存需要小心同步和互斥问题,以避免多个进程同时修改共享变量导致的竞态条件和数据不一致问题。
领取专属 10元无门槛券
手把手带您无忧上云