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 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扫描二维码加群:

    

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值