龙卷风:使用unix插座预先分叉

时间:2014-06-19 19:43:20

标签: python webserver tornado

使用Tornado Web Server,我试图在绑定到unix套接字后使用它们的pre-fork,但是我收到以下错误:

  

RuntimeError:无法在多个进程中运行:IOLoop实例已初始化。在调用start_processes()

之前,不能调用IOLoop.instance()

在绑定unix套接字并使用:

时,龙卷风是否会抛出此问题

myserver.start(0) vs使用TCP端口?

2 个答案:

答案 0 :(得分:1)

该错误与unix套接字无关。 IOLoops不能优雅地存在于fork中,因此如果要进行fork,则必须在初始化任何全局IOLoop之前执行此操作(但在绑定任何套接字之后)。通常,您必须在fork之前尽可能少地执行,因为许多Tornado组件隐式启动IOLoop。如果您使用多个TCPServers,请确保只从您开始的第一个分叉!所有其他人都应该处于单进程模式。

答案 1 :(得分:0)

如果在应用程序初始化中有debug = True,则可能会遇到此错误。例如:

app = tornado.web.Application(handlers=[
.
.
],
debug=True)

因为它自动启用autoreload = True,这与分叉不兼容。因此,要解决此问题,您还需要在应用程序初始化中设置autoreload = False。

app = tornado.web.Application(handlers=[
.
.
],
debug=True, autoreload=False)