Как установить Режим отладки во время Торнадо?

Вы могли установить linux/freebsd поле и выполнить fetchmail + постфикс и некоторый веб-интерфейс, чтобы сделать, чтобы пользователи подписались на свою учетную запись веб-почты.

Вы могли также использовать fetchmail под окнами. Никогда не пытался использовать его, так не может говорить с тем, как хорошо это работает.

13
задан 26 May 2011 в 14:09
2 ответа

Вот измененный пример с сайта торнадо:

if __name__ == "__main__":
    application = tornado.web.Application([
        (r"/", MainHandler) 
    ], debug=True)
    application.listen(8888)
    tornado.ioloop.IOLoop.instance().start()
11
ответ дан 2 December 2019 в 21:27

Для тех, кто любит параметр 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 = Ложь, static_hash_cache = Ложь, serve_traceback = True.

Таким образом, при использовании debug = True Tornado также устанавливает (для удобства) другой флаг: autoreload = True , который "следит" за изменениями и перезагружает сервер.

Параметр автоперезагрузка - это параметр, который нельзя включить при использовании нескольких процессов. Поэтому вам нужно настроить его так:

if __name__ == "__main__":
    application = tornado.web.Application([
        (r"/", MainHandler) 
    ], debug=True, autoreload=False)
    application.listen(8888)
    tornado.ioloop.IOLoop.instance().start()
0
ответ дан 2 December 2019 в 21:27