精华内容
下载资源
问答
  • python 子进程超时退出

    2014-09-05 09:18:00
    一:循环 忙等 子进程结束 import subprocess import os import time tt = '555' cmd = "python /home/100003/python/mypython/sub2.py "+" 333"+" 444 "+tt print time.time() sub2 = subprocess....
    一:循环 忙等 子进程结束
    
    import subprocess  
    import os  
    import time  
    tt = '555'  
    cmd = "python /home/100003/python/mypython/sub2.py "+" 333"+" 444 "+tt  
    print time.time()  
    sub2 = subprocess.Popen(cmd, shell=True)  
    while 1:  
        ret1 = subprocess.Popen.poll(sub2)  
        if ret1 == 0:  
            print sub2.pid,'end'  
            break  
        elif ret1 is None:  
            print  'running'  
            time.sleep(1)  
        else:  
            print sub2.pid,'term'  
            break  
    print time.time()  

     

    转载于:https://www.cnblogs.com/taotaowill/p/3957255.html

    展开全文
  • PR_SET_PDEATHSIG (since Linux 2.1.57) Set the parent process death signal of the calling process to arg2 (either a signal value in the range 1..maxsig, or 0 to clear). Thi
    PR_SET_PDEATHSIG (since Linux 2.1.57)
                  Set the parent process death signal of the calling process to arg2
                  (either a signal value in the range 1..maxsig, or 0 to clear).  This is
                  the signal that the calling process will get when its parent dies.
                  This value is cleared for the child of a fork(2).
    
    
    import ctypes 
    
    libc = ctypes.CDLL('libc.so.6')  
    
    pid = os.fork() 
    if pid == 0:  
        libc.prctl(1, 15)  
        # something in child
    
    elif pid > 0:
        # something in child

    libc.prctl(1, 15) 是起作用的语句。
     
    转自 http://xiaoxia.org/2012/03/05/prctl/
    
    
    
    展开全文
  • python的多线程不是真正的多线程,所以使用多进程来实现高并发,比如训练模型读取数据时,但是kill只会杀死相应的进程ID,由于真实环境下子进程太多,一个一个去kill太麻烦,下面实现了只需要杀死主进程id即可同时使...

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

        

     

     

     

     

    展开全文
  • 在使用python的multiprocess库时,如果在主进程中的处理子进程的返回函数callback或者处理子进程的错误的函数errorbackerror中抛出异常,则子进程无法退出。 (1)errorcallback中抛出异常 import multiprocessing ...

    在使用python的multiprocess库时,如果在主进程中的处理子进程的返回函数callback或者处理子进程的错误的函数errorbackerror中抛出异常,则子进程无法退出。
    (1)errorcallback中抛出异常

    import multiprocessing
    import os
    import time
    import traceback
    
    def work(args):
        try:
            time.sleep(1)
            print(os.get_pid())
        except Exception as e:
        	# 子进程报错
            a += 1
            print(traceback.format_exc(3))
    
    def callback(args):
        print(args)
    
    def errorcallback(args):
    	# 处理子进程错误的函数报错
    	a = 1/0
        print(args)
    
    def task():
        pool =  multiprocessing.Pool(processes=2)
        for i in range(10):
            res = pool.apply_async(work,args=(i,),callback=callback,error_callback=errorcallback)
        # for r in res.get():
        #     print(r)
        pool.close()
        pool.join()
      
    task()
    

    运行时:
    在这里插入图片描述
    (2)解决办法
    在errorcallback中使用try…except…

    import traceback
    def errorcallback(args):
        try:
            a = 1/0
            print(args)
        except:
            print(traceback.format_exc(3))
    

    (3) 总结
    在主进程中的处理子进程的返回函数callback或者处理子进程的错误的函数errorbackerror中使用try…except …去保证其一定能运行成功,避免子进程阻塞等待。

    展开全文
  • 实际需求:父进程退出子进程也跟着退出。 Python 创建了1个界面窗口,点击开始训练后,创建4个进程,分别进行4个模型的训练,当点击窗口右上角的差号退出后,开始时,窗口关闭了,但是模型训练没有结束。也就是...
  • python 如何优雅地退出子进程

    万次阅读 2016-07-13 15:54:47
    当主进程要求子进程退出时,如何能安全地退出子进程呢?参考一些代码,我写了这个例子。运行之后,用kill pid试试。pid是主进程的pid。当然子进程的也没问题。1)如果kill pid为子进程的pid,当所有子进程都kill掉了...
  • 《主进程被杀死时,如何保证子进程同时退出,而不变为孤儿进程(一)》 《主进程被杀死时,如何保证子进程同时退出,而不变为孤儿进程(二)》 《主进程被杀死时,如何保证子进程同时退出,而不变为孤儿进程(三)》...
  • 子进程在运行时,如果在控制台使用Ctrl+C向父进程发送信号,这时会让子进程先捕捉到这个信号,造成子进程退出。父进程是在子进程之后捕捉到这个信号的(在python里会引发KeyboardInterrupt异常)。 如果这时父进程...
  • Python】多进程退出

    千次阅读 2020-04-16 16:40:07
    问题描述:解决在python多进程运行过程中,主进程中断后子进程不随主进程退出的问题。 解决方法:在程序中适当位置增加以下代码。 import os import signal def term(): pid = os.getpid() pgid = os.getpgid...
  • python的fork进程后子进程一定要退出

    千次阅读 2019-06-07 23:34:54
    [root@linux1 python_tidb]# cat mypy03.py #!/usr/bin/env python3 import os def fork_process(): newpid=os.fork() if newpid==0: pid=os.getpid() cmd = 'python3 mypy02.py '+str(pid...
  • Subprocess ...subprocess.call(args, *, stdin=None, ...父进程等待子进程完成,返回退出信息(returncode,相当于Linux exit code) subprocess.check_call(args, *, stdin=None, stdout=None, stderr=None, shell=Fal
  • python——进程

    2019-07-08 15:52:25
    子进程指定的函数传递参数2.4.1进程之间不共享全局变量2.4.2主进程会等待所有的子进程执行完成程序再退出3、进程池3.1进程池的概念3.2. 进程池同步执行任务3.3. 进程池异步执行任务 1、进程概念与特征...
  • python守护进程

    2020-11-23 19:34:59
    子进程再次fork一个进程,这个进程可以称为孙子进程,而后子进程退出。 重定向孙子进程的标准输入流、标准输出流、标准错误流到/dev/null。 完成上面的4个步骤,那么最终的孙子进程就称为守护进程。先看下代码,...
  • python 守护进程

    2014-07-16 15:47:41
    daemon进程守护进程1.fork子...子进程再次fork一个进程,这个进程可以称为孙子进程,而后子进程退出4.重定向孙子进程标准输入流,标准输出等atexit程序退出 调用某个函数kill 级别#!/usr/bin/envpython importti...
  • Python守护进程

    2012-10-29 11:56:13
    1、创建子进程,父进程退出。 2、将工作目录切换到根目录。 3、将掩码设置为0。 4、创建新的会话,子进程成为该会话中唯一的进程组的领头进程。 5、再创建子进程,父进程退出。 6、重定向标准输入、标准输出、...
  • Python僵尸进程

    2018-07-10 10:09:08
    1、基本概念 我们知道在unix/linux中,正常情况下,子进程是通过父进程创建的,子进程在创建新的进程。... 孤儿进程:一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤...
  • python进程

    2017-05-24 18:26:19
    os.fork()方法 该方法会衍生出一个子进程,父进程和子进程都会...创建子进程后,父进程退出子进程也会被回收,所以父进程一般需要调用os.wait()或os.waitpid()方法等待子进程结束 os.wait()等待任意一个子进程结束
  • 这时候也许,我们有这样一种需求:需要父进程对子进程有监控动作,即,超过一定的时间,就不再等待子进程自己退出,而是去kill子进程,回收资源 以下会列出几张实现方法 1.os.system Python 2.5.2 (r252...
  • python设置进程守护

    2021-01-26 15:22:45
    #为了保证子进程能够正常运行,主进程会等所有的子进程执行完成后再销毁,设置守护主进程的目的是主进程退出子进程销毁,不让主进程再等待子进程去执行 import time import multiprocessing def work(): for i in ...
  • 2019独角兽企业重金招聘Python工程师标准>>> ...
  • 孤儿进程 : 父进程先于子进程退出,此时子进程成为孤儿进程。 特点: 孤儿进程会被系统进程收养,此时系统进程就会成为孤儿进程新的父进程,孤儿进程退出该进程会自动处理。 僵尸进程 : 子进程先于父进程退出,父...
  • 在PyQT窗口退出时,子进程一直退出不彻底,而且多次运行也开启了多个子进程,所以想在退出时批量关闭它们,可以用下面的命令: ps aux | grep 进程名 | awk '{print $2}' | xargs kill -9 或者: ps -ef | grep...
  • 如果你设置一个线程为守护线程,就表示你在说这个线程是不重要的,在进程退出的时候,不用等待这个线程退出。如果你的主线程在退出的时候,不用等待那些线程完成,那就设置这些线程的daemon属性。即在线程开始...
  • python 守护进程(daemon)

    2017-01-02 14:13:46
    守护进程的编写步骤: ...3、子进程再次fork一个进程,这个进程可以称为孙子进程,然后子进程退出。 4、重定向孙子进程的标准输入流,标准输出流,标准错误到/dev/null #!/usr/bin/envpython #-*-coding...

空空如也

空空如也

1 2 3 4 5 ... 19
收藏数 380
精华内容 152
关键字:

python子进程退出

python 订阅