Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 基于异步mongoDB查询不断更新表_Python_Node.js_Mongodb_Asynchronous_Tornado - Fatal编程技术网

Python 基于异步mongoDB查询不断更新表

Python 基于异步mongoDB查询不断更新表,python,node.js,mongodb,asynchronous,tornado,Python,Node.js,Mongodb,Asynchronous,Tornado,我试图编写一个网页,从mongoDB中提取数据,并根据返回的值更新一个表。目前,我可以使用motor查询mongoDB,并异步处理每条消息。然而,我只能写一次每负载的页面。我想知道是否有一种方法可以设置tornado,只要页面打开,就可以继续从mongoDB中拉出?这就是我目前的每页工作负载,但我不确定如何根据mongoDB的更新时间动态更新工作负载 import tornado.ioloop, tornado.web, motor class LoadHandler(tornado.web.

我试图编写一个网页,从mongoDB中提取数据,并根据返回的值更新一个表。目前,我可以使用motor查询mongoDB,并异步处理每条消息。然而,我只能写一次每负载的页面。我想知道是否有一种方法可以设置tornado,只要页面打开,就可以继续从mongoDB中拉出?这就是我目前的每页工作负载,但我不确定如何根据mongoDB的更新时间动态更新工作负载

import tornado.ioloop, tornado.web, motor

class LoadHandler(tornado.web.RequestHandler):
    @tornado.web.asynchronous
    def get(self):
        db = self.settings['db']
        self.write('''
        <<!doctype html>
        <html lang="en">
            <head>
                <title>Coin Info</title>
                <meta http-equiv="content-type" content="text/html; charset=utf-8">
                <script type=text/javascript src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
                <style>
                  div.table {border: 1px solid black; display: table; width: 500px;}
                  div.row {border: 1px solid black; display: table-row; }
                  div.cell {border: 1px solid black; display: table-cell; }
                  div.wrapper { float: left;width: 200px; }
                </style>
            </head>
            <body>
                <div class="wrapper">
                    <div class="table">
                        <div class="header">
                            <div class="cell">Name</div>
                            <div class="cell">Item1</div>
                            <div class="cell">Item2</div>
                            <div class="cell">Item3</div>
                        </div>
        ''')
               db.posts.find().sort([('_id',-1)]).each(self._got_message)

    def _got_message(self, message,error):
        if error:
            raise tornado.web.HTTPError(500, error)
        elif message:
            self.write('<div class="row">')
            self.write('<div class="cell" data-name={0}>{0}</div>'.format(message['values']['name']))
            self.write('<div class="cell" data-item1={0}>{0}</div>'.format(message['item1']))
            self.write('<div class="cell" data-item2={0}>{0}</div>'.format(message['values']['item2']))
            self.write('<div class="cell" data-item3={0}>{0}</div>'.format(message['values']['item3']))
             self.write('</div>')
        else:
            self.write('</div></div></div></div></body>')
            self.finish()

class MainHandler(tornado.web.RequestHandler):
    @tornado.web.asynchronous
    def get(self):
        self.write('here')
        self.finish()

db = motor.MotorClient().current_db

application = tornado.web.Application([
        (r'/load/', LoadHandler),
        (r'/', MainHandler)
    ], db=db
)

print('Listening on http://localhost:5000')
application.listen(5000)
tornado.ioloop.IOLoop.instance().start()
导入tornado.ioloop、tornado.web、motor
类LoadHandler(tornado.web.RequestHandler):
@tornado.web.asynchronous
def get(自我):
db=自我设置['db']
self.write(“”)

服务器发送完响应后,常规HTTP连接就会关闭。因此,在连接关闭后,您无法向客户端发送任何数据

要向客户端发送实时数据更新,您可以使用Websocket。与常规HTTP连接不同,Websocket连接可以随时保持打开状态,服务器可以随时向客户端发送数据

Tornado's是一款很好的Websockets入门软件。对于一些高级的东西,有一款聊天应用程序,可以随意使用