有没有办法从python脚本中获取不断变化的数据,并在Vue组件中显示和更新?

2024-10-03 02:42:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个脚本,创建这些百分比变化字典,然后将其保存为json文件,该脚本跟踪股票,因此百分比经常变化,我每分钟更新字典

 expoDictJ['totalPercentChange']=totalPercentChanges
 expoDictJ['lastMin']=lmPercentChanges

 with open('data.json', 'w') as outfile:
     json.dump(expoDictJ, outfile)

我还有一个标准的Vue组件,用于显示通过道具传入的数据,例如这些百分比变化。我希望每次“data.json”文件更改时,网页都会更新新数据,但我不确定这是否可行。如果这整个保存到文件系统不是在两个程序之间传输数据的最佳方式,那么任何正确方向的帮助或指针都将不胜感激


Tags: 文件数据脚本jsondata字典withoutfile
1条回答
网友
1楼 · 发布于 2024-10-03 02:42:27

您可以执行轮询,每x次向服务器发送一个HTTP请求以获取最新数据,也可以使用Websocket/Socket.io将数据从服务器发送到客户端应用程序(本例中为Vue应用程序)

使用(short)轮询,您只需:

  1. Create a simple HTTP Server in python(或者您可以使用框架/微框架,如FlaskFastAPI,这可能会节省您一些时间)
  2. 在python HTTP服务器中创建发送json数据的端点
  3. 每x次从Vue应用程序向Python服务器发送一个HTTP请求以获取数据,代码如下所示:
let duration = 10000; // 10s

// Your HTTP endpoint
let url = "http://pythonserveriporurl.com/something"

// run every 10s
setInterval( () => {
  const xhr = new XMLHttpRequest();
  xhr.open("GET", url);
  xhr.onreadystatechange = function() {
    // If request is finished with status code 200
    if (this.readyState === XMLHttpRequest.DONE && this.status === 200) {
      const data = JSON.parse(this.responseText);
      // do something with the data
    }
  };
}, duration);

您还可以进行长轮询,其工作原理与短轮询稍有不同,请阅读更多here

使用websocket/socket.io,您需要:

  1. 在python应用程序中创建一个websocketsocket.io服务器,该服务器在每次更改.json数据时都会发出一个事件
  2. 从Vue应用程序连接到socket.io(例如,客户端滚动到底部)/websocket服务器,然后侦听socket.io/websocket服务器发出的事件,获取数据,并在Vue组件上更新它

选择哪一个?

这取决于您如何在python应用程序上进行“跟踪”,您是否也使用短轮询,每分钟向外部资源发送一个请求以更新json数据?或者,只有当实际数据实时更改时,您才使用其他方法更新json数据

如果您在python应用程序中使用类似于短轮询的方法,那么我认为使用websocket/socket.io不会给您带来太多好处,除非您每次从外部资源获取数据时数据都没有发生变化,并且只有在实际数据发生变化时才从服务器发出数据。如果您正在实时更新JSON数据,那么您可能需要考虑使用WebStuts/SoCKE.IO,因为轮询可以使用更多的带宽,特别是如果您以非常短的延迟来执行它。p>

两者都不是很难做到,但我认为大多数人会比websocket/socket.io更熟悉HTTP的概念,所以对你来说可能更容易

相关问题 更多 >