Как установить режим отладки в Tornado?


13

Я гуглил и нашел подсказку, что мне нужно установить режим отладки в Tornado, чтобы он мог автоматически перезагружать файлы при обновлении. Но я не нашел точную строку для вставки. Я пробовал разные комбинации, похожие на это, application.settings = {"Debug": True}но это не помогает.


я думаю, что это должно быть {"debug": True}
Jondinham

Ответы:


11

Вот измененный пример с сайта торнадо:

if __name__ == "__main__":
    application = tornado.web.Application([
        (r"/", MainHandler) 
    ], debug=True)
    application.listen(8888)
    tornado.ioloop.IOLoop.instance().start()

2
"debug = True" должен быть вне списка обработчиков, чтобы он работал - примерно так: "...], debug = True)"
Hemm

Хороший улов, я написал это без проверки. Обновил мой ответ соответственно.
Джон Хаддад

0

Для тех, кто любит эту debug=Trueопцию и использует Tornado-multiprocess, возникает следующая ошибка:

Traceback (most recent call last):
  File "./main.py", line 54, in <module>
    server.start(0)  # forks one process per cpu
  File "/Users/me/Library/Python/2.7/lib/python/site-packages/tornado/tcpserver.py", line 221, in start
    process.fork_processes(num_processes)
  File "/Users/me/Library/Python/2.7/lib/python/site-packages/tornado/process.py", line 130, in fork_processes
    raise RuntimeError("Cannot run in multiple processes: IOLoop instance "
RuntimeError: Cannot run in multiple processes: IOLoop instance has already been initialized. You cannot call IOLoop.instance() before calling start_processes()

Это потому, что debug=Trueзагрузить, IOLoopи он не может быть загружен дважды.

Согласно документации

Установка debug = True эквивалентна autoreload = True, compiled_template_cache = False, static_hash_cache = False, serve_traceback = True.

Поэтому при использовании debug=TrueTornado также устанавливает (для удобства) другой флаг: autoreload=Trueкоторый «следит» за изменениями и перезагружает сервер.

autoreloadВариантом является тот , который не может быть включен при использовании мульти-процесс. Так что вам нужно настроить его так:

if __name__ == "__main__":
    application = tornado.web.Application([
        (r"/", MainHandler) 
    ], debug=True, autoreload=False)
    application.listen(8888)
    tornado.ioloop.IOLoop.instance().start()
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.