Jak ustawić tryb debugowania w Tornado?


13

Poszukałem go i znalazłem wskazówkę, że powinienem ustawić tryb debugowania w Tornado, aby mógł automatycznie ponownie ładować pliki podczas aktualizacji. Ale nie znalazłem dokładnego ciągu do wstawienia. Próbowałem różnych kombinacji podobnych do tego, application.settings = {"Debug": True}ale to nie pomaga.


myślę, że powinno być { "debug": true}
jondinham

Odpowiedzi:


12

Oto poprawiony przykład ze strony tornado:

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

2
„debug = True” musi znajdować się poza listą programów obsługi, aby działało --- w ten sposób: „...], debug = True)”
Hemm

Dobry haczyk, napisałem to bez sprawdzania. Zaktualizowałem odpowiednio moją odpowiedź.
Jon Haddad

0

Dla tych, którzy lubią tę debug=Trueopcję i używają wieloprocesowego Tornado, pojawi się następujący błąd:

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()

Jest tak, ponieważ debug=Trueładowanie IOLoopnie może być ładowane dwukrotnie.

Zgodnie z dokumentacją

Ustawienie debug = True jest równoważne z autoreload = True, compiled_template_cache = False, static_hash_cache = False, serve_traceback = True.

Tak więc podczas korzystania z debug=TrueTornado ustawia (dla wygody) kolejną flagę: autoreload=Truektóra „obserwuje” zmiany i ponownie ładuje serwer.

autoreloadOpcja to taka, która nie może być włączone przy użyciu multi-proces. Musisz to skonfigurować w następujący sposób:

if __name__ == "__main__":
    application = tornado.web.Application([
        (r"/", MainHandler) 
    ], debug=True, autoreload=False)
    application.listen(8888)
    tornado.ioloop.IOLoop.instance().start()
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.