首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Ctrl-C即KeyboardInterrupt在Python中取消线程

Ctrl-C即KeyboardInterrupt在Python中取消线程
EN

Stack Overflow用户
提问于 2019-06-21 03:51:50
回答 2查看 0关注 0票数 0

我在某处读到KeyboardInterrupt异常只在Python的主线程中引发。我还读到在子线程执行时主线程被阻塞。那么,这是否意味着CTRL+ C永远不会到达子线程。我尝试了以下代码:

代码语言:javascript
复制
def main():
    try:
        thread = threading.Thread(target=f)
        thread.start()  # thread is totally blocking (e.g., while True)
        thread.join()
    except KeyboardInterrupt:
        print "Ctrl+C pressed..."
        sys.exit(1)

def f():
    while True:
        pass  # do the actual work

在这种情况下,CTRL+ C对执行没有影响。它就像是无法收听信号。我理解这是错误的方式吗?有没有其他方法可以使用CTRL+ 杀死线程C?

EN

回答 2

Stack Overflow用户

发布于 2019-06-21 12:42:45

你正在使用的问题是thread1.join(),这将导致你的程序等到该线程完成继续。

信号将始终被主进程捕获,因为它是接收信号的信号,它是具有线程的进程。

如你所示,你基本上运行一个没有线程功能的“普通”应用程序,因为你启动1个线程并等到它完成继续。

票数 0
EN

Stack Overflow用户

发布于 2019-06-21 13:29:52

如果你想让主线程在加入时接收CTRL+ C信号,可以通过添加超时来join()调用。

以下似乎正在起作用(daemon=True如果您希望main实际结束,请不要忘记添加):

代码语言:javascript
复制
thread1.start()
while True:
    thread1.join(600)
    if not thread1.isAlive():
        break
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100009099

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档