开启进程的两种方式
方式一:
from multiprocessing import Process
def task(name):
print('hello', name)
print('我是子进程')
if __name__ == '__main__':
p = Process(target=f, args=('bob',))
p.start()
time.sleep(1)
print('执行主进程的内容了')
方式二:
import os
from multiprocessing import Process
class Task(Process):
def __init__(self, name):
super().__init__()
self.name = name
def run(self):
print(os.getpid())
print(f'{self.name}正在和女主播聊天')
if __name__ == '__main__':
p = Task('nick')
p.start()
join方法
作用:阻塞,等待子进程完成。
from multiprocessing import Process
import time,os
def task(s):
time.sleep(s)
if __name__ == '__main__':
p1 = Process(target=task, args=(1,))
p2 = Process(target=task, args=(2,))
p3 = Process(target=task, args=(3,))
p1.start()
p2.start()
p3.start()
p1.join() # 等1s
p2.join() # 等1s
p3.join() # 等1s,内部会调用wait()
print('子进程', p1.pid)
print('主进程', os.getpid()) # 主进程要等待所有的子进程结束才会结束,因为主进程 要在结束前回收僵尸进程
守护进程
守护进程的本质也是一个进程
主进程的代码执行完毕,守护进程直接结束。
大前提:主进程结束之前守护进程一直运行着
from multiprocessing import Process
import time
def task():
print('守护进程 start')
time.sleep(4)
print('守护进程 end')
if __name__ == '__main__':
p = Process(target=task)
p.daemon = True
p.start()
time.sleep(2)
print('主进程...')