我有一系列称重传感器,它们作为体重秤,需要实时更新网页。当我运行称重传感器的代码(LoadRack.py)时,我可以连续读取重量。函数(onVoltageRatioChangeHandler)在计时器上运行,我能够使用该数据获取体重,我需要能够在我的socketio网页中打开它。
我的第二个文件application.py,使用socketio运行了一个网页,并且将显示更新的数字,而无需刷新页面(完美)!我可以在application.py中导入LoadRack.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
...