我正在使用gevent使用python编写的应用程序。我想让它立即退出,因为我没有明确地陷入任何异常。
看起来我必须修补核心gevent代码。
有没有办法可以在我的应用程序中执行此操作,而无需修补gevent或greenlet?
答案 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
。