Làm cách nào để đặt chế độ Gỡ lỗi trong Tornado?


13

Tôi đã googled và tìm thấy một gợi ý rằng tôi nên đặt chế độ gỡ lỗi trong Tornado để nó có thể tải lại các tệp tự động khi cập nhật. Nhưng tôi đã không tìm thấy một chuỗi chính xác để chèn. Tôi đã thử các kết hợp khác nhau tương tự như thế này application.settings = {"Debug": True}nhưng không được.


tôi nghĩ rằng nó phải là {"gỡ lỗi": Đúng}
jondinham

Câu trả lời:


11

Đây là một ví dụ được điều chỉnh từ trang lốc xoáy:

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

2
"debug = True" phải nằm ngoài danh sách các trình xử lý để nó hoạt động --- như thế này: "...], debug = True)"
Hemm

Bắt tốt, tôi đã viết nó mà không kiểm tra nó. Cập nhật câu trả lời của tôi cho phù hợp.
Jon Haddad

0

Đối với những người thích debug=Truetùy chọn và sử dụng đa xử lý Tornado, lỗi sau sẽ được nêu ra:

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

Điều này là do debug=Truetải IOLoopvà nó không thể được tải hai lần.

Theo tài liệu

Đặt debug = True tương đương với autoreload = True, comp_template_cache = false, static_hash_cache = false, Serv_tracBack = True.

Vì vậy, khi sử dụng debug=TrueTornado cũng đặt (để thuận tiện) một cờ khác: autoreload=True"theo dõi" các thay đổi và tải lại máy chủ.

Các autoreloadtùy chọn là một trong đó không thể được bật lên khi sử dụng đa quá trình. Vì vậy, bạn cần phải cấu hình nó như vậy:

if __name__ == "__main__":
    application = tornado.web.Application([
        (r"/", MainHandler) 
    ], debug=True, autoreload=False)
    application.listen(8888)
    tornado.ioloop.IOLoop.instance().start()
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.