python多進程編程,如何讓主進程和子進程都退出

  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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章