min*_*767 5 javascript python flask
我正在使用带有JavaScript的Python Flask构建一个Web应用程序.我是Javascript的初学者.
我现在做的过程:
在Flask Python代码中,
1.我通过废弃网络获取数据(每分钟更新的数字数据).2.使用数据并计算一些东西并获得最终数字.3.创建一个包含最终数字的列表4.通过将列表添加到页面的Flask 5定义中,将列表提供给页面.现在在HTML中通过使用{{data | safe}}标记捕获列表来获取列表
问题是:在步骤1中,我得到的数据每分钟都在更新.例如,在该网页上现在有15个数据点.我解析了该网页的最后10个数据点,然后我将它们放入Python的列表中,然后执行以下步骤并在我的网页上制作图表.一分钟后,在数据源网页中,将有16个数据点可用,我需要获取最后10个数据点.在这种情况下,我需要再次运行python代码以获取最新的10个数据点,以使用它们在我的网页上制作图表.
所以,我需要始终运行整个python代码,这是整个Flask应用程序init.py文件并重新渲染我的网页以查看更新的图表.如果我不在我的服务器中重新运行init.py文件,那么即使在10分钟或2小时后,我也只能看到我第一次永久解析的数据.
我应该如何运行Flask并始终获取更新的数据,而不是每次都重新运行烧瓶init.py.
我考虑过使用time.sleep(60),以便每隔1分钟运行一次烧瓶app python文件.但是,当我的代码更多地考虑计算时,这确实需要很多时间.并没有真正的工作.
我该怎么解决这个问题?
我应该使用time.sleep吗?或者是更好的方式?
这是一个经典的"推送"更新问题.您的Web服务器将更新为您希望经常更新(或"推送")到Web客户端前端的信息.
正如PJ Santoro建议的那样,您可以反复轮询您的服务器(每10秒钟一次),沿着"是否有新数据?没有.好的.是否有新数据?没有.好的.是否有新数据?是的,这里是!太棒了!有没有新数据?...."这是相当低效的,但对于低数据量,你可能永远不会看到这个问题.
更高效的更新系统将使服务器仅在新数据准备好时发送更新信号.有两种主要方法可以做到这一点:
长轮询,又称反向AJAX和Comet.您的网页在服务器URL上打开一个AJAX请求,例如/update_data超时很长(例如30分钟或一小时).当服务器有数据时,它通过等待的AJAX连接发送它.这有很多复杂的问题,包括管理服务器端的并发(不是历史上Python的强项)以及甚至最大超时(我使用这种技术的最后一小时)可能在没有数据的情况下到期,并且需要一些错误处理管理那个.如果你想尝试长轮询/反向AJAX,这里有一个使用Flask的例子.
WebSockets.WebSockets是服务器和客户端之间交互式和"推送"更新的最新方法.它们使用得非常好; 像Jupyter笔记本这样的项目广泛依赖于它们.它们非常高效且非常适合客户端状态的这种增量更新,并且代码通常比反向AJAX等改造更容易被拜占庭和混乱.但是...... WebSockets也存在复杂性.例如,在Flask服务器端管理并发性仍然是一个重要问题.如果您想将WebSockets视为更新机制,下面是一个如何将它们与Flask一起使用的示例.
您使用的任何一种方法,如果您的数据随着时间的推移而增长,您还需要构建每次更新时传输的数据,以便进行增量更新.无论管道有多好,如果每次更新都传输数千个数据点,它就不会很快.但是,长轮询和WebSockets管道应该至少让您与合法的实时更新功能保持距离.
| 归档时间: |
|
| 查看次数: |
7140 次 |
| 最近记录: |