我们在fork 创建子进程的时候,有个特点就是 主进程和子进程互不影响, 但是 我们在用Process 类创建的子进程就需要等待
子进程全部结束后然后再结束主进程。
下边我们验证两个问题:
- 主进程的和子进程之间数据隔离
- 主进程等待子进程结束后再结束
下边的代码 打印都是一样,说明他们公用一个数据
a=1000
def test():
global a
a+=1
print(a)
test()
print(a)
# 打印为
# 1001
#1001
修改下我们用子进程 运行test, 主进程 再次打印 ,看看它们的值是一样的吗 ?
代码如下:
from multiprocessing import Process
import time
a=1000
def test():
global a
a+=1
print("子线程的值为%s"%a)
if __name__ == '__main__':
p=Process(target=test)
p.start()
print(a)
打印的结果显示 他们之间的数据已经达到了隔离。 进程之间的数据会各自保存自己的,互相不干扰。
如下:
1000
子线程的值为1001
下边用代码证明 主进程要等 子进程 如下:
from multiprocessing import Process
import time
a=1000
def test():
for i in range(10):
global a
a+=1
print("子线程的值为%s"%a)
time.sleep(1)
if __name__ == '__main__':
p=Process(target=test)
p.start()
print(a)
打印结果:
1000 # 虽然主进程已经执行完了,并没有立马结束,他还会等待子进程 结束 ,看下边的打印。
子线程的值为1001
子线程的值为1002
子线程的值为1003
子线程的值为1004
子线程的值为1005
子线程的值为1006
子线程的值为1007
子线程的值为1008
子线程的值为1009
子线程的值为1010
Process finished with exit code 0 # 当子进程 全部执行完成,主进程结束 然后打印这段话