从Python中的守护程序线程触发主线程中的异常

时间:2012-05-15 17:02:57

标签: python multithreading python-multithreading

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

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

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

3 个答案:

答案 0 :(得分:1)

在深入研究主题文档后,我终于找到了解决方案interrupt_main()

答案 1 :(得分:0)

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

编辑:我混淆了子进程和多处理模块。但是,多处理模块中有一个exitcode属性,似乎与子进程返回码属性类似。

答案 2 :(得分:0)

通常使用消息队列完成。 见Catch a thread's exception in the caller thread in Python

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