免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 13059 | 回复: 11
打印 上一主题 下一主题

怎样用ctrl + c 退出一个多线程的python 程序 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-01-05 15:07 |只看该作者 |倒序浏览
Hi
我写的多线程程序,在调试过程中用ctrl + c不能中断其运行,我总是要用killall python才行,怎样做到用ctrl + c就可以中断一个多线程的程序啊??
多谢

论坛徽章:
0
2 [报告]
发表于 2009-01-05 15:13 |只看该作者
多线程不是很熟,你可以通过捕获异常,或者信号来退出。
试试看还行

try:
    #代码部分
except KeyboardInterrupt:
    import sys
    sys.exit()

论坛徽章:
0
3 [报告]
发表于 2009-01-05 15:33 |只看该作者
子线程setDaemon(True)了么?

论坛徽章:
0
4 [报告]
发表于 2009-01-05 20:52 |只看该作者
没有,子线程就是最普通的,没有做任何额外的操作,是直接创建一个线程实例,然后通过start运行的

论坛徽章:
0
5 [报告]
发表于 2009-01-06 08:26 |只看该作者
能不能看看程序?

论坛徽章:
0
6 [报告]
发表于 2009-01-06 08:47 |只看该作者
我觉得可能是子线程没有收到信号。
可以把子线程setDaemon(True)让它随主线程一起退出试一下。

[ 本帖最后由 luffy.deng 于 2009-1-6 08:48 编辑 ]

论坛徽章:
0
7 [报告]
发表于 2009-01-06 09:12 |只看该作者
Main Thread添加如下处理;不知道是否好使;

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

signal.signal(signal.SIGINT, sigint_handler);

论坛徽章:
0
8 [报告]
发表于 2009-01-06 09:13 |只看该作者
默认Main Thread退出,所有的Sub Thread都会退出的; (大部分操作系统是这样的, SGI IRIX例外).

论坛徽章:
0
9 [报告]
发表于 2009-01-06 11:10 |只看该作者
原帖由 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"

论坛徽章:
0
10 [报告]
发表于 2009-01-06 11:13 |只看该作者
如果子线程还在执行那么CTRL+C进程是不会退出的。如果子线程也设置了信号处理不知道会不会有改变。
子线程如果阻塞,或者死循环之类的,就很有可能出现lz说的现象。

[ 本帖最后由 luffy.deng 于 2009-1-6 11:16 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP