1.python中默认进程是非守护的,此时假如设置了多个进程,主进程非守护,要等待所有子进程运行结束才能退出;
2.当设置了守护主进程,如:进程对象.daemon = True,此时主进程结束子进程就得结束;
3.第二点提出,子进程没结束主进程就可以强制将其结束,显然在大多数情景不能符合生产需要,我们就可以将子进程设置join()从而实现子进程执行完主进程才能执行,join一旦执行会阻塞主进程,join的子进程以后不影响其他进程的并行运行:join之前的进程都会并行执行,join之后的进程也会在解阻塞后继续并行运行。
详细代码如下:
import os
import time
from multiprocessing import Process
def work(t):
for i in range(3):
# while True:
print('time之前%s' % os.getpid())
time.sleep(t)
print('time之后子线程%s正在执行' % os.getpid())
def pr():
for i in range(8):
time.sleep(0.3)
print('ksfjladfjalkdfjalsdjflk')
def q():
i = input('输入退出')
if __name__ == '__main__':
p1 = Process(target=work, args=(0.5, ))
p2 = Process(target=work, args=(5, ))
p1.daemon = True
p2.daemon = True
p1.start()
p2.start()
pr()
p1.join()
pr()
p3 = Process(target=work, args=(0.5,))
p4 = Process(target=work, args=(5,))
p3.daemon = True
p4.daemon = True
p4.start()
p3.start()
pr()
print('主进程%sover' % os.getpid())
大家自己测试,自己学习哈