จะตั้งโหมด Debug ใน Tornado ได้อย่างไร?


13

ฉัน googled และพบคำแนะนำว่าฉันควรตั้งโหมดดีบักใน Tornado เพื่อให้สามารถโหลดไฟล์ใหม่โดยอัตโนมัติในการอัปเดต แต่ฉันไม่พบสตริงที่แน่นอนที่จะแทรก ฉันลองชุดค่าผสมที่แตกต่างกันเช่นนี้application.settings = {"Debug": True}แต่ไม่ได้ช่วย


ฉันคิดว่ามันควรเป็น {"debug": 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

เยี่ยมมากฉันเขียนโดยไม่ตรวจสอบเลย อัปเดตคำตอบของฉันตาม
Jon Haddad

0

สำหรับผู้ที่ชื่นชอบdebug=Trueตัวเลือกและใช้ Tornado-multiprocess ข้อผิดพลาดต่อไปนี้จะได้รับการยก:

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และมันไม่สามารถโหลดได้สองครั้ง

ตามเอกสาร

การตั้งค่า debug = True เทียบเท่ากับ autoreload = True, compiled_template_cache = False, static_hash_cache = False, เสิร์ฟ _traceback = True

ดังนั้นเมื่อใช้debug=Trueพายุทอร์นาโดยังตั้งค่า (เพื่อความสะดวก) อีกธง: autoreload=Trueซึ่ง "ดู" สำหรับการเปลี่ยนแปลงและโหลดเซิร์ฟเวอร์

autoreloadตัวเลือกหนึ่งที่ไม่สามารถที่จะเปิดเมื่อมีการใช้กระบวนการหลาย ดังนั้นคุณต้องกำหนดค่าเช่น:

if __name__ == "__main__":
    application = tornado.web.Application([
        (r"/", MainHandler) 
    ], debug=True, autoreload=False)
    application.listen(8888)
    tornado.ioloop.IOLoop.instance().start()
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.