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

查看所有标签

猜你喜欢:

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

Twisted Network Programming Essentials

Twisted Network Programming Essentials

Abe Fettig / O'Reilly Media, Inc. / 2005-10-20 / USD 29.95

Developing With Python's Event-driven Framework一起来看看 《Twisted Network Programming Essentials》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

URL 编码/解码
URL 编码/解码

URL 编码/解码