Як встановити режим налагодження в Tornado?


13

Я погуглив і знайшов підказку, що я повинен встановити режим налагодження в Tornado, щоб він міг автоматично перезавантажувати файли під час оновлення. Але я не знайшов точного рядка для вставки. Я спробував різні комбінації, подібні до цієї, application.settings = {"Debug": True}але це не допомагає.


я думаю, це має бути {"налагодження": True}
jondinham

Відповіді:


12

Ось підкручений приклад із сайту торнадо:

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, з’явиться наступна помилка:

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його неможливо два рази.

Відповідно до документації

Встановлення налагодження = True еквівалентно автоматичному завантаженню = 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.