Bagaimana cara mengatur mode Debug di Tornado?


13

Saya mencari di Google dan menemukan petunjuk bahwa saya harus mengatur mode debug di Tornado sehingga bisa memuat ulang file secara otomatis saat pembaruan. Tapi saya tidak menemukan string yang tepat untuk dimasukkan. Saya mencoba berbagai kombinasi yang mirip dengan ini application.settings = {"Debug": True}tetapi tidak membantu.


Saya pikir itu harus {"debug": Benar}
jondinham

Jawaban:


11

Berikut adalah contoh tweak dari situs tornado:

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

2
"debug = True" harus di luar daftar penangan agar dapat berfungsi --- seperti ini: "...], debug = True)"
Hemm

Bagus tangkapan, saya telah menulisnya tanpa memeriksanya. Memperbarui jawaban saya sesuai dengan itu.
Jon Haddad

0

Bagi mereka yang menyukai debug=Trueopsi dan menggunakan Tornado-multiprocess kesalahan berikut akan dimunculkan:

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

Ini karena debug=Truememuat IOLoopdan tidak dapat dimuat dua kali.

Menurut dokumentasi

Pengaturan debug = True setara dengan autoreload = True, compiled_template_cache = Salah, static_hash_cache = Salah, serve_traceback = Benar.

Jadi ketika menggunakan debug=TrueTornado juga menetapkan (untuk kenyamanan) bendera lain: autoreload=Trueyang "mengawasi" perubahan dan memuat ulang server.

The autoreloadpilihan adalah salah satu yang tidak dapat diaktifkan saat menggunakan multi-proses. Jadi Anda perlu mengkonfigurasinya seperti ini:

if __name__ == "__main__":
    application = tornado.web.Application([
        (r"/", MainHandler) 
    ], debug=True, autoreload=False)
    application.listen(8888)
    tornado.ioloop.IOLoop.instance().start()
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.