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

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

内容简介: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初始化的多线程脚本》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

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

B端产品经理必修课

B端产品经理必修课

李宽 / 电子工业出版社 / 2018-9 / 59

《B端产品经理必修课:从业务逻辑到产品构建全攻略》主要讲述了“单个产品管理流程”,以展示B 端产品经理的工作方法及B 端产品的设计方法。《B端产品经理必修课:从业务逻辑到产品构建全攻略》分为三个部分。第一部分主要讲述的是B 端产品经理的工作流程和定义(即单个产品管理流程),以及从事B 端产品经理的职业现状和规划,还包括设计B 端产品时需要了解的指导思想。第二部分是通过各个章节来讲述单个产品管理流程......一起来看看 《B端产品经理必修课》 这本书的介绍吧!

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

在线压缩/解压 JS 代码

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具