Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Flask Web服务器和TCP服务器同时运行_Python_Multithreading_Flask_Tcpserver - Fatal编程技术网

Python Flask Web服务器和TCP服务器同时运行

Python Flask Web服务器和TCP服务器同时运行,python,multithreading,flask,tcpserver,Python,Multithreading,Flask,Tcpserver,我刚刚用Flask框架构建了Web服务器。在这个项目中,我创建了新的线程运行TCP服务器。 此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(QObje

我刚刚用Flask框架构建了Web服务器。在这个项目中,我创建了新的线程运行TCP服务器。 此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')
因此,当我从浏览器访问时,温度值不变(仍然等于初始值20)。我不知道为什么??? 所以我试着通过创建一个计时器来测试温度值,并以3s的间隔读取它(查找) . 因此,每3秒后,它将同时打印:“现在数据温度280,现在数据温度20”

任何帮助都将不胜感激