【问题标题】:python tornado - how to return real-time datapython tornado - 如何返回实时数据
【发布时间】:2015-04-13 21:19:23
【问题描述】:

我在 python 中使用 tornado 库。我有一个添加数据的队列。我必须保持连接打开,以便当客户端请求时我从队列中发送项目。这是我的一个简单实现。我面临的问题是当我向queue 添加新元素时,我没有看到它被返回。事实上,我没有看到在IOLoop.current().start() 行下面执行任何代码。

from tornado.ioloop import IOLoop
from tornado.web import RequestHandler, Application, url,asynchronous
from Queue import Queue

import json

q=Queue()
q.put("one")
q.put("two")

class HelloHandler(RequestHandler):
    def get(self):
        data=q.get()
        self.write(data)

def make_app():
     return Application([
         url(r"/", HelloHandler),
         ])

def main():
    app = make_app()
    app.listen(8888)
    IOLoop.current().start() # stops here
    time.sleep(2)
    q.put("three")
    print q

if __name__=='__main__':
    main()

第一次这样做: http://localhost:8888/

返回“一”

第二次:

http://localhost:8888/

返回“二”

第三次了”

http://localhost:8888/

阻止

【问题讨论】:

    标签: python websocket tornado


    【解决方案1】:

    您遇到的问题是调用 IOLoop.current().start() 将控制权转移到 Tornado。它循环直到调用IOLoop.stop()

    如果您需要在 IOLoop 启动后执行某些操作,则可以使用其中一个回调。例如,这里将您的代码修改为使用IOLoop.call_later()。如果您使用的是较早 (IOLoop.add_timeout()。

    from tornado.ioloop import IOLoop
    from tornado.web import RequestHandler, Application, url,asynchronous
    from Queue import Queue
    
    import json
    
    q=Queue()
    q.put("one")
    q.put("two")
    
    class HelloHandler(RequestHandler):
        def get(self):
            data=q.get()
            self.write(data)
    
    def make_app():
         return Application([
             url(r"/", HelloHandler),
             ])
    
    def main():
        app = make_app()
        app.listen(8888)
        IOLoop.current().call_later(2, q.put, "three")
        IOLoop.current().start()
    
    if __name__=='__main__':
        main()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-02-19
      • 1970-01-01
      • 2017-04-15
      • 1970-01-01
      • 2016-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多