如何在Python中的守护程序线程中运行阻塞代码的主线程中触发异常?
我有一个守护程序线程,它定期检查数据库中是否有记录,指示其当前进程应该终止(即用户按下了“取消”按钮)。在我的主要非守护程序线程中,我正在运行对外部进程的阻塞调用,我无法轻松修改以正常终止。但是,当我手动触发一个时,主线程可以正常处理正常的KeyboardInterrupt。
因此,如果我的守护程序线程收到terminate命令,我如何在主线程中引发异常以终止我的进程?
答案 0 :(得分:1)
在深入研究主题文档后,我终于找到了解决方案interrupt_main()。
答案 1 :(得分:0)
您可以使用returncode属性获取子进程返回码。如果它与零不同,则提出一些东西。
编辑:我混淆了子进程和多处理模块。但是,多处理模块中有一个exitcode属性,似乎与子进程返回码属性类似。
答案 2 :(得分:0)
通常使用消息队列完成。 见Catch a thread's exception in the caller thread in Python
但是它不会抢占你的主线程,你必须主动轮询它。也许通过信号,你将能够得到你需要的东西。