Я только что собрал WebServer с помощью Flask Framework. В этом проекте я создаю новый поток запуска TCP Server. этот TCP-сервер прослушивает порт 9999 для установления соединения для получения данных (значения температуры) от устройства IED. это мой код от Python
app = Flask(__name__)
BUFFER_SIZE = 1024
temp = 20
mutex = Lock()
def dbus_timer():
print("Now Data Temp " + str(temp))
class WorkerSignals(QObject):
finished = pyqtSignal(int)
error = pyqtSignal(tuple)
result = pyqtSignal(object)
progress = pyqtSignal(int)
class Worker(QRunnable):
def __init__(self, fn, *args, **kwargs):
super(Worker, self).__init__()
self.fn = fn
self.args = args
self.kwargs = kwargs
self.signals = WorkerSignals()
self.kwargs['progress_callback'] = self.signals.progress
@pyqtSlot()
def run(self):
try:
result = self.fn(*self.args, **self.kwargs)
except:
traceback.print_exc()
exctype, value = sys.exc_info()[:2]
self.signals.error.emit((exctype, value, traceback.format_exc()))
else:
self.signals.result.emit(result)
finally:
self.signals.finished.emit(self.args[0])
class StreamWorker(QtCore.QObject):
def __init__(self, *args, **kwargs):
super(StreamWorker, self).__init__()
self.threadPool = QThreadPool()
self.threadPool.setMaxThreadCount(1)
self.TcpServerStart()
def UpdateTemperatureSensor(self, bTxt):
global temp
_temp = int.from_bytes(bTxt, byteorder='big')
if(_temp != temp):
with mutex:
temp = _temp
print("\n Temperature: " + str(temp))
def UpdatePotentinmeterSensor(self, txt):
data = json.loads(txt)
print(data["previous"])
print(data["now"])
def TcpServerListens(self, progress_callback):
print("Start TcpServer")
HOST, PORT = "192.168.0.88", 9999
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind((HOST, PORT))
s.listen(1)
sock, addr = s.accept()
length = 0
bReceive = b''
while True:
try:
receiv = sock.recv(BUFFER_SIZE)
if(receiv == b''):
break
bReceive = bReceive + receiv
if(len(bReceive) > 6):
bReceive = b''
elif(len(bReceive) == 6):
bTxtHead = bReceive[0:2].decode("utf-8")
bTxtFooter = bReceive[4:6].decode("utf-8")
if (bTxtHead == 'AA' and bTxtFooter == 'FF'):
bTxt = bReceive[2:4]
self.UpdateTemperatureSensor(bTxt)
bReceive = b''
except (errorCode, message):
print(message + "aaaaa ")
def TcpServerStart(self):
worker = Worker(self.TcpServerListens)
worker.signals.progress.connect(self.workProgress)
self.threadPool.start(worker)
def workProgress(self, n):
print("done!!!!")
@app.route('/')
def index():
with mutex:
return 'Temperature is now ' + str(temp)
if __name__ == '__main__':
tcpServer = StreamWorker()
timer = multitimer.MultiTimer(interval=3, function=dbus_timer)
timer.start()
app.run(debug=True, host='0.0.0.0')
Так, когда я получаю доступ к http://192.168.0.88: 5000 / из браузера, значение температуры не изменяется (все еще равное начальному значению 20 ). Я не знаю почему ??? Поэтому я пытаюсь проверить значение температуры по тому, как я создаю таймер и читаю его с интервалом = 3 с (посмотрите вверх) , и это результат . Таким образом, через каждые 3 с он будет печатать: «Сейчас температура данных 280, сейчас температура данных 20» одновременно
Любая помощь будет признательна!