2014-06-19 125 views
0

使用旋風Web服務器,我試圖綁定到Unix套接字後,用自己的預分叉預分叉,但我得到了以下錯誤:旋風:與Unix套接字

RuntimeError: Cannot run in multiple processes: IOLoop instance has already been initialized. You cannot call IOLoop.instance() before calling start_processes()

是否有原因龍捲風引發這個問題時綁定unix套接字和使用:

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

回答

1

該錯誤與unix套接字無關。 IOLoops不會優雅地存活,所以如果你要分叉,你必須在初始化任何全局IOLoop之前(但是在綁定任何套接字之後)完成它。一般來說,您必須在分叉前儘可能少地做,因爲許多Tornado組件隱式啓動IOLoop。如果您使用多個TCPServers,請確保只從第一個開始分叉;所有其他人應該處於單進程模式。

+0

如果您嘗試使用Motor Mongo驅動程序,那麼您會發現它不支持這種操作模式。或者您可能會發現需要禁用調試模式。 –

0

如果您在應用程序初始化中有debug = True,則可能會遇到此錯誤。例如:

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

由於它自動啓用autoreload = True,它與分叉不兼容。所以爲了解決這個問題,你還需要在應用程序初始化中設置autoreload = False。

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