我正在使用 gevent 使用 python 编写的应用程序。我希望它因我没有明确捕获的任何异常而立即退出。
看起来我必须修补核心 gevent 代码。
有什么方法可以在我的应用程序中执行此操作,而无需修补 gevent 或 greenlet?
最佳答案
您正在使用version 1.0beta然后调整 gevent.get_hub().SYSTEM_ERROR
可以帮助你。 SYSTEM_ERROR
列出了异常类型,如果这些异常类型被 gevent 捕获,则应在主 greenlet 中重新引发。
默认情况下,SYSTEM_ERROR
为(KeyboardInterrupt、SystemExit、SystemError)
。所有其他未处理的异常都会被报告,但不会结束进程(除非在主 greenlet 中引发原始异常,在这种情况下通常会发生)。
您可以修改SYSTEM_ERROR:
import gevent
gevent.spawn(int, "xxx").join() # will merely report ValueError on stderr
gevent.get_hub().SYSTEM_ERROR += (ValueError, )
gevent.spawn(int, "xxx").join() # will report ValueError, but then it will also re-raise it
请参阅source where SYSTEM_ERROR is defined .
如果将SYSTEM_ERROR
设置为BaseException
,则任何未处理的异常都将被视为致命的。
关于python - 如何让 gevent 应用程序在出现异常后立即退出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9916873/