请问要怎样才能终止多线程的程序?

请问要怎样才能终止多线程的程序?

我写了个多线程的程序。但是运行后就退不出来,多线程是每隔2秒无 限循环,但是我按ctrl+c也退不出来,要怎么办呢?

QUOTE:
#coding: gbk
import threading
import time
class MyThread(threading.Thread):
    def __init__(self,tName):
        threading.Thread.__init__(self,name=tName)
        self.go = True
    def setThreadRunning(go=True):
        self.go = go
    def run(self):
        while self.go:
            lock.acquire()
            print "你好,这是线程测试:",self.getName()
            time.sleep(2.45)
            lock.release()
lock = threading.RLock()
tList = []
for i in xrange(5):
    t = MyThread("这是第:"+str(i)+"线程")
    tList.append(t)
for t in tList:
    t.start()
for t in tList:
    t.join()

在lock.acquire()
            print "你好,这是线程测试:",self.getName()
            time.sleep(2.45)
            lock.release()
中处理,让自己结束,可以设置结束标志.
如果在线程循环中设置条件退出,这个是可以的,但是我想让程序无限执行下去,当按了"ctrl+c"后才停止。这个不知道怎么做了?我把程序加入了signal模块也处理不了。不知我程序有问题不?

QUOTE:
#coding: gbk
import threading
import time
import signal
import sys
class MyThread(threading.Thread):
    def __init__(self,tName):
        threading.Thread.__init__(self,name=tName)
        self.go = True
    def setThreadRunning(go=True):
        self.go = go
    def run(self):
        while self.go:
            lock.acquire()
            print "你好,这是线程测试:",self.getName()
            time.sleep(2.45)
            lock.release()
def myhandle(signalNun,frame):
    print 'sigtime: step into signal %2.2f' % time.time(),"now will stop"
    sys.exit(0)
def sMain():
    signal.signal(signal.SIGINT,myhandle)
    while True:
        time.sleep(1000)
lock = threading.RLock()
def main():
    tList = []
    for i in xrange(5):
        t = MyThread("这是第:"+str(i)+"线程")
        tList.append(t)
    for t in tList:
        t.start()
    for t in tList:
        t.join()
if __name__ == '__main__':
    main()
    sMain()

你可以设置一个全局变量,作为标志位来判断是否结束线程序.或者结束其中的一个线程序.
当时我就是这么做的.
全局变量好像设置不了呢?我只想按ctrl+c后就把线程终止,程序结束。
不会设置不了全局变量的,另外可以这样
class MyThread(threading.Thread):
    def __init__(self,tName):
        threading.Thread.__init__(self,name=tName)
        self.go = True
        self.close = false

然后判断当ctrl+c时,捕捉键盘异常,设置self.close=True 在run中,结束线程.
我现在处理方法是比较麻烦的,我在线程里读取一个文件,如果文件返回是1就关闭自己。这样处理很不方便啊。如果哪位知道能按ctrl+c就结束程序的,麻烦告诉小弟啊。

QUOTE:
#coding: gbk
import threading
import time
import sys
class MyThread(threading.Thread):
    def __init__(self,tName):
        threading.Thread.__init__(self,name=tName)
        self.go = True
        self.cou =0
    def run(self):
        while self.go:
            lock.acquire()
            print "你好,这是线程测试:",self.getName(),"共运行:",self.cou,"次"
            self.cou = self.cou + 1
            if getFileInfo()=="1":
                self.go = False
            self.cou = self.cou + 1
            time.sleep(1.45)
            lock.release()         
lock = threading.RLock()
def getFileInfo():
    return open("1.txt","r").read(1)
def main():
    tList = []
    for i in xrange(5):
        t = MyThread("这是第:"+str(i)+"线程")
        tList.append(t)
    for t in tList:
        t.start()
    for t in tList:
        t.join()
if __name__ == '__main__':
    main()

版主说的我明白,但是我不知道程序怎么知道我按下ctrl+c啊。我把signal加进去。signal没用呢。怎么按也停止不了。但是我如果没有线程,当独拿signal来做个测试。它又可以当我按ctrl+c时打印信息呢。总之,如果是用signal模块记录有没有按ctrl+c,我就是不会运用这个signal和线程结合了。
去看一看karrigell的代码我记得有一段。
好,我去研究一下先