【发布时间】:2019-07-11 13:18:19
【问题描述】:
我不熟悉多处理模块。我正在尝试验证不同过程中的变量是否无关紧要。经过测试,我发现不同的进程可能“共享”变量。当进程具有相同的 pid 时会发生这种情况。不知道有没有关系?
环境:Windows 10;蟒蛇3.7
# -*- coding: utf-8 -*-
import os
from multiprocessing import Pool
p=0
def Child_process(id_number):
global p
print('Task start: %s(%s)' % (id_number, os.getpid()))
print('p = %d' % p)
p=p+1
print('Task {} end'.format(id_number))
if __name__ == '__main__':
p = Pool(4)
p.map(Child_process,range(5))
p.close()
p.join()
结果是:
任务开始:0(7668)
p = 0
任务开始:1(10384)
任务 0 结束
p = 0
任务开始:2(7668)
p = 1
任务 1 结束
任务 2 结束
任务开始:3(7668)
任务开始:4(10384)
p = 1
任务 4 结束
p = 2
任务 3 结束
我认为p应该总是0,但是当不同进程具有相同的pid时它会增加?
【问题讨论】:
-
@Green Cloak Guy 我明白了。谢谢
-
@GreenCloakGuy:这不是 PID 重用。这是一个由四个长寿命进程组成的池,其中一个进程执行多个任务;它不是为每个任务创建一个新进程。
标签: python python-3.x python-multiprocessing