Como definir o modo de depuração no Tornado?


13

Pesquisei no google e encontrei uma dica de que eu deveria definir o modo de depuração no Tornado para que ele pudesse recarregar arquivos automaticamente na atualização. Mas não encontrei uma string exata para inserir. Eu tentei combinações diferentes semelhantes a isso, application.settings = {"Debug": True}mas isso não ajuda.


Eu acho que deveria ser { "depuração": true}
jondinham

Respostas:


11

Aqui está um exemplo aprimorado do site tornado:

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

2
"debug = True" tem que estar fora da lista de manipuladores para que ele funcione --- assim: "...], debug = true)"
Hemm

Boa captura, eu tinha escrito sem checá-lo. Atualizei minha resposta de acordo.
Jon Haddad

0

Para quem gosta da debug=Trueopção e usa o multiprocesso Tornado, o seguinte erro será gerado:

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

Isso ocorre porque debug=Truecarrega IOLoope não pode ser carregado duas vezes.

De acordo com a documentação

Definir debug = True é equivalente a autoreload = True, compiled_template_cache = False, static_hash_cache = False, serve_traceback = True.

Então, ao usar debug=True Tornado, também define (por conveniência) outra bandeira: autoreload=Trueque "vigia" as alterações e recarrega o servidor.

A autoreloadopção é aquela que não pode ser ativada ao usar o processo múltiplo. Então você precisa configurá-lo da seguinte forma:

if __name__ == "__main__":
    application = tornado.web.Application([
        (r"/", MainHandler) 
    ], debug=True, autoreload=False)
    application.listen(8888)
    tornado.ioloop.IOLoop.instance().start()
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.