Pour ceux qui aiment l' debug=True
option et utilisent Tornado-multiprocess, l'erreur suivante sera générée:
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()
En effet, debug=True
charger IOLoop
et ne peut pas être chargé deux fois.
Selon la documentation
La définition de debug = True est équivalente à autoreload = True, compiled_template_cache = False, static_hash_cache = False, serve_traceback = True.
Ainsi, lorsque vous utilisez debug=True
Tornado, vous définissez également (pour plus de commodité) un autre indicateur: autoreload=True
qui "surveille" les modifications et recharge le serveur.
L' autoreload
option est celle qui ne peut pas être activée lors de l'utilisation de plusieurs processus. Vous devez donc le configurer comme suit:
if __name__ == "__main__":
application = tornado.web.Application([
(r"/", MainHandler)
], debug=True, autoreload=False)
application.listen(8888)
tornado.ioloop.IOLoop.instance().start()