Как запретить выводить исключение Gevent на консоль на KeyboardInterrupt - PullRequest
0 голосов
/ 24 мая 2019

Я впервые пробовал Gevent и кое-что застрял. Я уверен, что мог бы быть легкий способ сделать это, но я не могу найти ответ на это. Вот что меня беспокоит:

Это пример gevent, взятого из здесь :

import gevent
import signal

def run_forever():
    gevent.sleep(1000)

if __name__ == '__main__':
    gevent.signal(signal.SIGQUIT, gevent.kill)
    thread = gevent.spawn(run_forever)
    thread.join()

Это порождает Greenlet, который работает вечно (не буквально, это 1000 секунд!), И он должен корректно завершить работу программы на KeyboardInterrupt. Теперь, когда я нажимаю Ctrl ^ C, программа выключается очень хорошо, но проблема в том, что она печатает некоторые следы, подобные приведенным ниже, которые я не хочу видеть:

^CTraceback (most recent call last):
 File "test.py", line 14, in <module>
   thread.join()
 File "src/gevent/greenlet.py", line 711, in gevent._greenlet.Greenlet.join
 File "src/gevent/greenlet.py", line 737, in gevent._greenlet.Greenlet.join
 File "src/gevent/greenlet.py", line 726, in gevent._greenlet.Greenlet.join
 File "src/gevent/_greenlet_primitives.py", line 60, in gevent.__greenlet_primitives.SwitchOutGreenletWithLoop.switch
 File "src/gevent/_greenlet_primitives.py", line 64, in gevent.__greenlet_primitives.SwitchOutGreenletWithLoop.switch
 File "src/gevent/__greenlet_primitives.pxd", line 35, in gevent.__greenlet_primitives._greenlet_switch
KeyboardInterrupt

Я попробовал небольшой взлом, учитывая здесь

gevent.get_hub().NOT_ERROR += (KeyboardInterrupt,)

Но, к сожалению, это не решает мою проблему. Есть ли другой способ справиться с этим поведением Gevent? Я просто хочу, чтобы gevent не печатал следы стека на KeyboardInterrupt и корректно завершал работу программы.

...