0

如何从 Python 中的守护线程触发主线程中的异常,运行阻塞代码?

我有一个守护线程,它定期检查数据库中是否有记录表明其当前进程应该终止(即用户按下了“取消”按钮)。在我的主要非守护程序线程中,我正在对无法轻松修改以正常终止的外部进程运行阻塞调用。但是,当我手动触发一个键盘中断时,主线程可以优雅地处理一个正常的键盘中断。

因此,如果我的守护线程收到终止命令,我如何在主线程中引发异常来终止我的进程?

4

3 回答 3

1

在挖掘了线程文档之后,我终于找到了解决方案是interrupt_main()

于 2012-05-16T00:54:57.357 回答
0

您可以使用returncode属性获取子流程返回码。如果它与零不同,则提出一些东西。

编辑:我混合了 subprocess 和 multiprocessing 模块。然而,在 multiprocessing 模块中有一个exitcode属性,看起来类似于 subprocess returncode 属性。

于 2012-05-15T17:10:38.520 回答
0

它通常使用消息队列来完成。请参阅在 Python 中的调用者线程中捕获线程的异常

但是它不会抢占你的主线程,你必须主动轮询它。也许有了信号,你就能得到你需要的东西。

于 2012-05-15T17:20:13.887 回答