В Python сигналы всегда обрабатываются основным потоком.Если IOLoop запускается из основного потока, он заблокирует его, когда сервер простаивает и ожидает ввода-вывода.В результате все сигналы будут ожидающими в потоке, чтобы проснуться.Это объясняет, почему при отправке запроса сервер отключается.
ОБНОВЛЕНИЕ: вы можете попробовать что-то вроде этого:
def set_ping(ioloop, timeout):
ioloop.add_timeout(timeout, lambda: set_ping(ioloop, timeout))
, а затем:
ioloop = tornado.ioloop.IOLoop.instance()
set_ping(ioloop, timedelta(seconds=2))
ioloop.start()
при запускепетля.В результате будет вызван select
с тайм-аутом 2,0 секунды, что предотвратит блокировку.(См. Также IOLoop Timeouts )
(Примечание: я не смог воспроизвести вашу ситуацию в Linux, хотя я вручную установил select
, поэтому я не могу дать 100% гарантию, чтоэто поможет, но звучит правдоподобно)