如何在任何异常后立即退出gevent应用程序?

时间:2012-03-28 22:58:14

标签: python exception gevent

我正在使用gevent使用python编写的应用程序。我想让它立即退出,因为我没有明确地陷入任何异常。

看起来我必须修补核心gevent代码。

有没有办法可以在我的应用程序中执行此操作,而无需修补gevent或greenlet?

2 个答案:

答案 0 :(得分:3)

您正在使用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,则任何未处理的异常都将被视为致命异事。

答案 1 :(得分:0)

您可以使用spawn_link_exception代替spawn