首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何中断python多线程应用?

如何中断python多线程应用?
EN

Stack Overflow用户
提问于 2010-10-28 18:53:57
回答 2查看 639关注 0票数 3

我试着运行下面的代码(我做了一点简化):

代码语言:javascript
复制
def RunTests(self):
        from threading import Thread
        import signal

        global keep_running
        keep_running = True
        signal.signal( signal.SIGINT, stop_running )

        for i in range(0, NumThreads):
            thread = Thread(target = foo)
            self._threads.append(thread)
            thread.start()

# wait for all threads to finish
        for t in self._threads:
            t.join()

def stop_running(signl, frme):  
    global keep_testing
    keep_testing = False 
    print "Interrupted by the Master. Good by!"
    return 0 

def foo(self):

    global keep_testing

    while keep_testing:
        DO_SOME_WORK();

我期望用户按下Ctrl+C,程序将通过消息和中断打印商品。然而,它并不起作用。问题出在哪里?

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-10-28 21:03:25

与常规进程不同,Python似乎不会以真正异步的方式处理信号。'join()‘调用以某种方式阻塞了主线程,阻止了它对信号的响应。我对此感到有点惊讶,因为我在文档中没有看到任何表明这可以/应该发生的东西。然而,解决方案很简单。在主线程中,在线程上调用'join()‘之前添加以下循环:

代码语言:javascript
复制
while keep_testing:
    signal.pause()
票数 3
EN

Stack Overflow用户

发布于 2010-10-28 21:01:48

threading docs

可以将线程标记为“守护进程线程”。这个标志的意义在于,当只剩下守护进程线程时,整个Python程序就会退出。初始值继承自创建线程。可以通过daemon属性设置该标志。

您可以在调用start()之前尝试设置thread.daemon = True,看看这是否能解决您的问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4042158

复制
相关文章

相似问题

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