python的多线程不是真正的多线程,所以使用多进程来实现高并发,比如训练模型读取数据时,但是kill只会杀死相应的进程ID,由于真实环境下子进程太多,一个一个去kill太麻烦,下面实现了只需要杀死主进程id即可同时使子进程也退出:
1.主进程和子进程的进程组ID是一样的,通过杀死进程组ID使主进程和子进程都退出
2.通过signal.signal(signal.SIGTERM, term)注册操作系统信号量处理方法
from multiprocessing import Process
import os
import time
import signal
def gan_huo_de_jin_cheng(x):
print('fun current pid is %s, group id is %s' % (os.getpid(), os.getpgrp()))
while True:
print('args is %s ' % x)
time.sleep(1)
def term(sig_num, addtion):
print('term current pid is %s, group id is %s' % (os.getpid(), os.getpgrp()))
os.killpg(os.getpgid(os.getpid()), signal.SIGKILL)
signal.signal(signal.SIGTERM, term)
print('master pid is %s' % os.getpid())
for i in range(3):
t = Process(target=gan_huo_de_jin_cheng, args=(str(i),))
t.daemon = True
t.start()
# 不管是ctrl+c还是kill -15 master pid还是主进程运行完毕,主进程和子进程都能正常退出
i = 0
while True:
if i >= 50:
break
print('this is master')
time.sleep(1)
i += 1
会抛出异常,不过不需要处理。
有问题加QQ群:877769335
或者用QQ扫描二维码加群: