Есть ли способ взять постоянно меняющиеся данные из скрипта python и отобразить их и обновить в компоненте Vue?

Есть ли способ взять постоянно меняющиеся данные из скрипта python и отобразить их и обновить в компоненте Vue?

16.06.2020 09:32:58 Просмотров 12 Источник

У меня есть скрипт, который создает эти словари процентных изменений, которые затем сохраняются в виде файла json, скрипт отслеживает запасы, поэтому процентные изменения часто происходят, и я обновляю словарь каждую минуту.

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

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

У меня также есть стандартный компонент Vue, только что построенный для отображения данных, которые передаются через реквизиты, такие как эти процентные изменения. Я хочу, чтобы веб-страница обновлялась новыми данными каждый раз, когда "данные".файл json меняется, но я не уверен, что это возможно. Если все это сохранение в файловой системе не является лучшим способом передачи данных между двумя программами, любая помощь или указатели в правильном направлении будут оценены!

У вопроса есть решение - Посмотреть?

Ответы - Есть ли способ взять постоянно меняющиеся данные из скрипта python и отобразить их и обновить в компоненте Vue? / Is there a way to take constantly changing data from a python script and have it displayed and updating in a Vue component?

Owl

16.06.2020 11:11:45

Вы можете сделать опрос, который отправляет HTTP-запрос на ваш сервер каждый раз x, чтобы получить последние данные, или вы можете использовать Websocket / Socket.io что позволяет вам передавать данные с вашего сервера в ваше клиентское приложение (в данном случае это приложение Vue).

С помощью (короткого) опроса вы просто:

  1. Создать простой HTTP-сервер в Python (или вы можете использовать рамки / microframework, как фляга или FastAPI , которые могут сохранить вам несколько раз)
  2. Создайте конечную точку на вашем HTTP сервере python которая отправляет данные json
  3. Отправляйте HTTP-запрос из вашего приложения Vue каждый раз x на сервер Python, чтобы получить данные, код будет выглядеть примерно так:
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);

вы также можете сделать длинный опрос, который работает немного иначе, чем короткий опрос, Подробнее читайте здесь

С websocket / socket.io - тебе нужно это сделать.:

  1. Создайте websocket или socket.io сервер в вашем приложении python, который выдает событие каждый раз, когда ваши данные .json изменяются
  2. Подключается из вашего приложения Vue к socket.io (прокрутите вниз для примера клиента) / websocket server, а затем прослушайте излучаемое событие от вашего компьютера. socket.io / websocket server, получить данные и обновить их на вашем компоненте Vue

Какой из них выбрать?

Это зависит от того, как вы делаете "отслеживание" в своем приложении python, используете ли вы также короткий опрос, который вы отправляете запрос на внешний ресурс каждые минуты, чтобы обновить данные json? или вы используете какой-то другой способ обновления ваших данных json только тогда, когда фактические данные изменяются a.k.a. в режиме реального времени?

Если вы используете метод, подобный короткому опросу в вашем приложении python, то я не думаю, что вы используете websocket / socket.io воля дает вам много преимуществ, если только данные не меняются каждый раз, когда вы получаете их из внешнего ресурса, и вы только выбрасываете их с вашего сервера, когда происходит фактическое изменение данных. Если вы обновляете данные json в режиме реального времени, то можете рассмотреть возможность использования websocket / socket.io так как опрос может использовать большую пропускную способность, особенно если вы делаете это с очень короткой задержкой.

Оба они не очень сложны в изготовлении, но я думаю, что большинство людей будут более знакомы с концепцией HTTP, чем websocket / socket.io так что вам, возможно, будет легче

Закрыть X