怎样用ctrl + c 退出一个多线程的python 程序

怎样用ctrl + c 退出一个多线程的python 程序

Hi
我写的多线程程序,在调试过程中用ctrl + c不能中断其运行,我总是要用killall python才行,怎样做到用ctrl + c就可以中断一个多线程的程序啊??
多谢
多线程不是很熟,你可以通过捕获异常,或者信号来退出。
试试看还行

try:
    #代码部分
except KeyboardInterrupt:
    import sys
    sys.exit()
子线程setDaemon(True)了么?
没有,子线程就是最普通的,没有做任何额外的操作,是直接创建一个线程实例,然后通过start运行的
能不能看看程序?
我觉得可能是子线程没有收到信号。
可以把子线程setDaemon(True)让它随主线程一起退出试一下。

Main Thread添加如下处理;不知道是否好使;

import sys
import string
import signal
  
def sigint_handler(signum, frame):
    sys.exit();

signal.signal(signal.SIGINT, sigint_handler);
默认Main Thread退出,所有的Sub Thread都会退出的; (大部分操作系统是这样的, SGI IRIX例外).


QUOTE:
原帖由 bohemia 于 2009-1-6 09:13 发表
默认Main Thread退出,所有的Sub Thread都会退出的; (大部分操作系统是这样的, SGI IRIX例外).

在python里,如果一个进程的主线程运行完毕而子线程还在执行的话,那么进程就不会退出,直到所有子线程结束为止。
你可以用下面的试一下,看看有setDaemon()和没有setDaemon()的区别
import threading
import time
class mythread(threading.Thread):
    def __init__(self, threadname):
        threading.Thread.__init__(self, name = threadname)
    def run(self):
        for i in range(10):
            print self.getName, i
            time.sleep(1)
t=mythread("ttt")
t.setDaemon(True)
t.start()
print "main"
如果子线程还在执行那么CTRL+C进程是不会退出的。如果子线程也设置了信号处理不知道会不会有改变。
子线程如果阻塞,或者死循环之类的,就很有可能出现lz说的现象。