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
あり、2回ロードできないためです。
ドキュメントによると
debug = Trueの設定は、autoreload = True、compiled_template_cache = False、static_hash_cache = False、serve_traceback = Trueと同等です。
そのため、debug=True
Tornado を使用する場合、(便宜上)別のフラグも設定autoreload=True
します。これは、変更を監視し、サーバーをリロードします。
このautoreload
オプションは、マルチプロセスを使用するときにオンにできないオプションです。したがって、次のように構成する必要があります。
if __name__ == "__main__":
application = tornado.web.Application([
(r"/", MainHandler)
], debug=True, autoreload=False)
application.listen(8888)
tornado.ioloop.IOLoop.instance().start()