python - 如何让 gevent 应用程序在出现异常后立即退出?

标签 python exception gevent

我正在使用 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/

相关文章:

JAVA - 仅当我使用调试运行它时才会出现异常

java - 不使用 try/catch 处理异常

python - redis + gevent - 性能不佳 - 我做错了什么?

python - 使用gevent并行ping

python - 为什么 `gevent.spawn` 与 monkeypatched `threading.Thread()` 不同?

Python 不直观的成员变量行为

swift - “ fatal error :在展开可选值时意外发现nil”是什么意思?

python - 为什么 pip 不安装最新版本的包,即使 PyPI 上有更新版本?

Python IOError : File not open for writing and global name 'w' is not defined 错误

python - 系统错误 : <class 'pyodbc.Error' > returned a result with an error set