У меня есть ряд тензодатчиков, которые действуют как весы, которые мне нужны для обновления веб-страницы в режиме реального времени. Когда я запускаю код для тензодатчиков (LoadRack.py), я могу непрерывно считывать вес. Функция (onVoltageRatioChangeHandler) запускается по таймеру, и я могу использовать эти данные для определения своего веса, мне нужно иметь возможность открыть их на моей веб-странице socketio.
Мой второй файл application.py запускает веб-страницу с помощью socketio и отображает обновленные номера без обновления страницы (идеально)! Я могу импортировать LoadRack.py в application.py, поэтому, когда моя веб-страница начинает работать, ячейки загрузки начинают генерировать данные, мне нужна помощь в переносе моего окончательного веса из LoadRack в application.py для отправки на мою страницу.
Я попытался вернуть значение, но он сделает это только после того, как цикл ячейки загрузки завершится, и это будет последнее значение, поэтому это не «реальное время». Не уверен, как решить это. Ниже приведен код.
nsum - это значение, которое я пытаюсь выдать. Спасибо
application.py
from flask_socketio import SocketIO, emit
from flask import Flask, render_template, url_for, copy_current_request_context
from time import sleep
from threading import Thread, Event
__author__ = 'slynn'
app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret!'
app.config['DEBUG'] = True
socketio = SocketIO(app, async_mode="threading")
thread = Thread()
thread_stop_event = Event()
class LoadCellThread(Thread):
def __init__(self):
self.delay = 1
super(LoadCellThread, self).__init__()
def pullvalue(self):
while not thread_stop_event.isSet():
# import LoadRack
# number = onVoltageRatioChangeHandler
# This is where I need to pull my live data to emit
number = 33 # This is just here for my testing
socketio.emit('newnumber', {'number': number}, namespace='/test')
sleep(self.delay)
def run(self):
self.pullvalue()
@app.route('/')
def index():
return render_template('index.html')
@socketio.on('connect', namespace='/test')
def test_connect():
global thread
if not thread.isAlive():
thread = LoadCellThread()
thread.start()
@socketio.on('disconnect', namespace='/test')
def test_disconnect():
print('Client disconnected')
if __name__ == '__main__':
socketio.run(app)
LoadRack.py (очень сокращенно)
...
test2 = []
def onVoltageRatioChangeHandler(self, voltageRatio):
print("[VoltageRatio Event] -> Voltage Ratio: " + str(voltageRatio))
test2.append(voltageRatio)
if len(test2) % 4 == 0:
n0 = test2[len(test2)-1]
n1 = test2[len(test2)-2]
nsum = n0 + n1
else:
nsum = 0
return nsum
...