pyserial 仅在 1 个线程上刷新

pyserial only flushes on 1 thread

我有 2 个虚拟 COM 端口和每个端口上的客户端。该连接适用于阅读。但它只写在其中一个线程上。例如:当我在 write_thread 上写入时,它会将其发送到串行端口并将其打印到控制台。但是在连接的客户端上,它仅在收到 read_worker 的响应时显示 write_worker 的输出。 有帮助吗?

import serial
import time
import threading

def read_worker():
    """"constantly reads and responds back"""
    while True:
        read_text = ser.readline()
        read = read_text.decode("utf-8")
        print(read)

        response = "response to: " + read
        ser.write(response.encode())
        ser.flush()
        print(response)
        time.sleep(.1)

def write_worker():
    """Constantly writes to see if it can"""
    i = 0
    while True:
        i += 1

        response = "Writing: " + str(i)
        ser.write(response.encode())
        print(response)
        time.sleep(2)


ser = serial.Serial(
    port="COM1",
    baudrate=115200,
    bytesize=serial.EIGHTBITS,
    stopbits=serial.STOPBITS_ONE,
    rtscts=True)

threading.Thread(target=read_worker).start()
threading.Thread(target=write_worker).start()

更新答案

有时只有在收到换行符时才会刷新缓冲区,因此我会尝试更改

response = "Writing: " + str(i)

进入

response = "Writing: " + str(i) + "\r\n"

仍然有效,但不是问题

一个串口只能打开一次。您现在正在向 COM1 传输字节,因此不可能在另一个线程中打开同一个 COM1 并读取这些字节。

您的设置应如下所示:

COM1 == 虚拟零调制解调器(重要,因为 tx/rx 对必须交叉)== COM2

然后您可以写入 COM1 并在 COM2 上读取结果。