我试图while
在 Tornado 中运行一个循环,同时保持 WebSocketHandler 处于打开状态。我试图实现gen.Task:
class WSHandler(tornado.websocket.WebSocketHandler):
count = db.my_collection.count() - 1
cursor = coll.find(tailable=True, await_data=True, skip=count)
(...)
@asynchronous
@gen.engine
def run(self):
doc = yield gen.Task(curse)
self.render(doc)
def curse(self):
while WSHandler.cursor.alive:
try:
doc = WSHandler.cursor.next()
return doc
def render(doc)
for c in WSHandler.connections:
c['id'].write_message(doc)
所以,除了保持WebSocket
开放,WSHandler
还有这些其他的自定义功能。我需要运行一个常量循环(curse(self)
)来跟踪 mongodb 的光标 - 并且是异步的,所以它不会阻塞WebSocketHandler
.
我的设置错了吗?我应该把这些功能放在其他地方吗?(在哪里?)我怎样才能运行无限while loop
并同时保持开放WebSocketHandler
?