【Python】multiprocessing - 进程隔离
在 Python 的 multiprocessing 模块中,每个进程都有自己的内存空间,因此进程之间的数据不会共享。这意味着每个进程对全局变量的修改不会影响其他进程。
代码结构
from multiprocessing import Process
nums = [11, 22]
def run_p1():
for i in range(4):
nums.append(i)
def run_p2():
for i in range(4):
nums.append(i)
print(nums)
if __name__ == '__main__':
p1 = Process(target=run_p1)
p2 = Process(target=run_p2)
p1.start()
p1.join()
p2.start()
p2.join()
详细步骤
- 全局变量 nums:
- nums 是一个全局列表,初始值为 [11, 22]。
- 定义 run_p1 函数:
- run_p1 函数在 nums 列表中追加 0, 1, 2, 3。
- 定义 run_p2 函数:
- run_p2 函数在 nums 列表中追加 0, 1, 2, 3,然后打印 nums。
- 创建和启动进程:
- p1 进程调用 run_p1 函数。
- p2 进程调用 run_p2 函数。
进程的行为
- p1 进程:
- 在 p1 进程中,nums 被修改为 [11, 22, 0, 1, 2, 3]。
- 但是,这个修改只影响 p1 进程的内存空间,不会影响主进程或其他进程。
- p2 进程:
- 在 p2 进程中,nums 被修改为 [11, 22, 0, 1, 2, 3]。
- 但是,这个修改只影响 p2 进程的内存空间,不会影响主进程或其他进程。
输出结果
由于每个进程都有自己的内存空间,p1 和 p2 进程对 nums 的修改不会相互影响。因此,p2 进程打印的 nums 只会包含它自己的修改。
最终输出结果是:
[11, 22, 0, 1, 2, 3]
总结
- 进程隔离:每个进程都有自己的内存空间,对全局变量的修改不会影响其他进程。
- 输出结果:p2 进程打印的 nums 只包含它自己的修改,即 [11, 22, 0, 1, 2, 3]。