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 上读取结果。
我有 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 上读取结果。