python - 如何中断python多线程应用程序?

标签 python multithreading signals

我正在尝试运行以下代码(我对其进行了一些简化):

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,程序将通过消息和中断打印商品。但是它不起作用。问题出在哪里?

谢谢

最佳答案

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

while keep_testing:
    signal.pause()

关于python - 如何中断python多线程应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4042158/

相关文章:

python - 如何使用 python 2.7 创建具有希伯来文名称的文件?

python - 如何填写列中的第一个日期?

java - long 和 double 值的原子读写

c++ boost导致崩溃

c# - 等待锁被释放

c++ - 信号执行期间的 sigprocmask

c - `signal()`是Linux上的系统调用函数吗?

audio - 高中心频率的IIR滤波器系数

c++ - 如何在 C++ 或 Python 中验证图像文件的完整性?

python - 使用 Python 创建图表和图形