Я впервые пробовал 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 и корректно завершал работу программы.