1.进程
- 开启进程的两种方式
-
from multiprocessing import Process import time def foo(name): print("{} is running!".format(name)) time.sleep(2) print("{} is done!".format(name)) if __name__ == '__main__': p = Process(target= foo, args= ("进程1")) p.satrt() print("等待运行进程......") >>> 等待运行进程...... >>> 进程1 is running! >>> 进程1 is done!
-
from multiprocessing import Process import time class MyProcess(Process): def __init__(self, name): super().__init__() self.name = name def run(self): print("{} is running!".format(self.name)) time.sleep(2) print("{} is done!".format(self.name)) if __name == '__main__': p = MyProcess("进程2") p.start() print("等待运行进程......") >>> 等待运行进程...... >>> 进程2 is running! >>> 进程2 is done!
- 查看进程
pid
(自己进程)和ppid
(父进程)
-
from multiprocessing import Process import time import os def foo(): print("{} is running! parent ID is {}".format(os.getpid(), os.getppid())) time.sleep(2) print("{} is done! parent ID is {}".format(os.getpid(), os.getppid())) if __name__ == '__main__': p = Process(target=foo, ) p.start() print("进程等待运行", os.getpid(), os.getppid()) >>> 进程等待运行 4900 5220 >>> 5364 is running! parent ID is 4900 >>> 5364 is done! parent ID is 4900
僵尸进程
+孤儿进程
-
僵尸进程
:当子进程结束时,并不会全部销毁,当父进程结束时才会销毁。 -
孤儿进程
:当父进程比子进程先结束时,这个子进程就被称为孤儿进程
,统一被init
接管
join
方法:可以实现执行完子进程再执行主进程
-
join
应用场景:- 在主进程的任务与子进程的任务彼此独立的情况下,当主进程的先执行完成,需要等待全部子进程任务完成,进行统一回收数据。
如果主进程的任务在执行到某一个阶段时,需要等待子进程执行完毕后才能继续执行
,就需要有一种机制能够让主进程检测子进程是否运行完毕,在子进程执行完毕后才继续执行,否则一直在原地阻塞,这就是join
方法的作用
-
from multiprocessing import Process def foo(name): print("{} is runing!".format(name