我正在尝试编写一个串行'代理',它将位于进程和物理串行设备之间,并在运行时重写一些命令。我让它以粗暴的方式工作,但它比直接进入物理设备慢得多。
为了加快速度,除了裸读/写之外,我已经删除了所有内容,但性能比预期慢得多。
任何想法我做错了什么?我对这个低级别的东西很新,我的大部分经验都是解析json / xml / etc和操作字符串。任何想法或提示都会非常感激。
继承简化代码 -
def host_thread( host_port, dv_port ):
while True:
try:
char = os.read(host_port, 1)
os.write(dv_port, char)
except OSError as err:
if err.errno == errno.EAGAIN or err.errno == errno.EWOULDBLOCK:
pass
else:
raise # something else has happened -- better reraise
def dv_thread( host_port, dv_port ):
while True:
try:
char = os.read(dv_port, 1)
os.write(host_port, char)
except OSError as err:
if err.errno == errno.EAGAIN or err.errno == errno.EWOULDBLOCK:
pass
else:
raise # something else has happened -- better reraise
if __name__ == "__main__":
host_port, slave = pty.openpty()
print("Connect to port: %s" % os.ttyname(slave))
fl = fcntl.fcntl(host_port, fcntl.F_GETFL)
fcntl.fcntl(host_port, fcntl.F_SETFL, fl | os.O_NONBLOCK)
dv_port = os.open("/dev/ttyUSB0", os.O_RDWR | os.O_NONBLOCK)
host_thread = threading.Thread(target=host_thread, args=[host_port, dv_port])
host_thread.start()
dv_thread = threading.Thread(target=dv_thread, args=[host_port, dv_port])
dv_thread.start()
while True:
time.sleep(.1)