Python中用Ctrl+C终止threading初始化的多线程脚本

栏目: Python · 发布时间: 8年前

内容简介:Python中用Ctrl+C终止threading初始化的多线程脚本

在编写 Python 脚本的时候,难免会遇到使用多线程操作的情况。

正常情况下,我们都习惯在 Shell 中使用 Ctrl + C 终止脚本的执行,但是在多线程环境中,我们发现 Ctrl + C 并不能有效终止开启了多线程的脚本。

由于 Python 提供的 threading 模块并没有提供线程的退出接口,导致我们没有办法终止已经正常运行的线程,尤其是线程被阻塞在内核的情况下。

解决这个问题的办法就是在线程初始化之后设置为守护模式( setDaemon ),并且不要调用 join 阻塞主线程。这样当主线程退出的时候,其他线程也随之退出了。

下面是我们解决这种问题的一个例子:

#!/bin/env python
# -*- coding: utf-8 -*-
 
import threading
import signal
import sys
import time
 
global is_exit
is_exit = False
 
def doWork(i):
    print "thread[%d] enter\n"%(i)
    while not is_exit:
       time.sleep(0.2)
    print "thread[%d] terminated\n"%(i)
 
def sig_handler(signum, frame):
    is_exit = True
    sys.exit(0)
    
if __name__ == "__main__":
    signal.signal(signal.SIGINT, sig_handler)
    signal.signal(signal.SIGTERM, sig_handler)
    cc = 5
    for i in range(cc):
        t = threading.Thread(target=doWork, args=(i,))
        t.setDaemon(True)
        t.start()
 
    raw_input("Waiting For Ctrl+C\n")

参考链接

Python 中用 Ctrl+C 终止多线程程序的问题解决


以上所述就是小编给大家介绍的《Python中用Ctrl+C终止threading初始化的多线程脚本》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

调试九法

调试九法

David J.Agans / 赵俐 / 人民邮电出版社 / 2010-12-7 / 35.00元

硬件缺陷和软件错误是“技术侦探”的劲敌,它们负隅顽抗,见缝插针。本书提出的九条简单实用的规则,适用于任何软件应用程序和硬件系统,可以帮助软硬件调试工程师检测任何bug,不管它们有多么狡猾和隐秘。 作者使用真实示例展示了如何应用简单有效的通用策略来排查各种各样的问题,例如芯片过热、由蛋酒引起的电路短路、触摸屏失真,等等。本书给出了真正能够隔离关键因素、运行测试序列和查找失败原因的技术。 ......一起来看看 《调试九法》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具