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 fun(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)
processes = []
signal.signal(signal.SIGTERM, term)
print('master pid is %s' % os.getpid())
for i in range(3):
t = Process(target=fun, args=(str(i),))
t.daemon = True
t.start()
processes.append(t)
# 不管是ctrl+c還是kill -15 master pid還是主進程運行完畢,主進程和子進程都能正常退出
i = 0
while True:
if i >= 50:
brea