Python обработка данных и задержка - PullRequest
0 голосов
/ 10 апреля 2020

Я разработал программу для управления HMI, когда сенсорный контроллер передает данные координат касания через разъем. Как видно из приведенного ниже кода, length - это данные в реальном времени, которые я получил, и это список строк, отображающих координаты x, y, z. После того, как данные получены, они обрабатываются, я печатаю список в текстовый файл, затем открываю файл и разделяю данные. Проблема в том, что после операции разделения данные, которые я получаю, больше не отображаются в режиме реального времени, существует огромная задержка. Например, я сравниваю "length" и "list" , печатая их в консоли в режиме реального времени, и они не совпадают ... Заранее спасибо за помощь!

Фрагмент функции socket_thread:

def socket_thread():
    global X, Y, Xsave, Ysave
    PORT = 2001
    BUFFER_SIZE = 1024
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect(('127.0.0.1', PORT))
    try:
        while True:
            s.sendall(b'true\n')
            length = s.recv(BUFFER_SIZE).decode()
            print(length, file=open("Eddie.txt", "a"))
            with open("Eddie.txt", "rt") as T:
                for buffer_line in T:
                    list = buffer_line.split('/')
                    if list[0] == 'True':
                        X = int(abs(round(float(list[1]))))
                        Y = int(abs(round(float(list[2]))))
            if not length:
                print("Recive_error\n")
                break
            len(length)
        s.sendall(b'end\n')
    except KeyboardInterrupt as e:
        s.sendall(b'end\n')
a = threading.Thread(name='socket_thread', target=socket_thread)
a.start()

1 Ответ

0 голосов
/ 10 апреля 2020

Будет ли следующий метод выполнять sh то же самое без постоянной повторной обработки всего файла:

def socket_thread():
    global X, Y, Xsave, Ysave
    PORT = 2001
    BUFFER_SIZE = 1024
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect(('127.0.0.1', PORT))
    try:
        with open("Eddie.txt", "a") as f:
            while True:
                s.sendall(b'true\n')
                length = s.recv(BUFFER_SIZE).decode()
                print(length, file=f)
                list = length.split('/')
                if list[0] == 'True':
                    X = int(abs(round(float(list[1]))))
                    Y = int(abs(round(float(list[2]))))
            if not length:
                print("Recive_error\n")
                break
            len(length)
        s.sendall(b'end\n')
    except KeyboardInterrupt as e:
        s.sendall(b'end\n')
a = threading.Thread(name='socket_thread', target=socket_thread)
a.start()
...