Python 等待串行端口读取的执行情况?
我已经编写了一个小型COM重定向和克隆python脚本,它将接收一个物理串行端口的输入,然后将它们输出到两个虚拟串行端口(其中一个是只读端口) 问题是,我注意到使用这个脚本使用了大量的CPU,大约50%,并且我启动的唯一其他应用程序是socat来创建虚拟端口 是否有任何我可能遗漏或查看的内容,可以在不引入任何超时的情况下降低CPU使用率 我使用的是树莓圆周率,基于debian的树莓操作系统 代码:Python 等待串行端口读取的执行情况?,python,performance,cpu-usage,cpu-speed,Python,Performance,Cpu Usage,Cpu Speed,我已经编写了一个小型COM重定向和克隆python脚本,它将接收一个物理串行端口的输入,然后将它们输出到两个虚拟串行端口(其中一个是只读端口) 问题是,我注意到使用这个脚本使用了大量的CPU,大约50%,并且我启动的唯一其他应用程序是socat来创建虚拟端口 是否有任何我可能遗漏或查看的内容,可以在不引入任何超时的情况下降低CPU使用率 我使用的是树莓圆周率,基于debian的树莓操作系统 代码: import serial, threading, sys def transferData
import serial, threading, sys
def transferData(serialIn, serialOutA, serialOutB):
data = serialIn.read(1024)
if data:
serialOutA.write(data)
serialOutB.write(data)
def main():
serialIn = serial.Serial(port = sys.argv[1], timeout=0, baudrate = 19200, parity=serial.PARITY_NONE, bytesize=serial.EIGHTBITS, stopbits=serial.STOPBITS_ONE)
serialOutA = serial.Serial(port = sys.argv[2], timeout=0, baudrate = 19200, parity=serial.PARITY_NONE, bytesize=serial.EIGHTBITS, stopbits=serial.STOPBITS_ONE)
serialOutB = serial.Serial(port = sys.argv[3], timeout=0, baudrate = 19200, parity=serial.PARITY_NONE, bytesize=serial.EIGHTBITS, stopbits=serial.STOPBITS_ONE)
while True:
transferData(serialIn, serialOutA, serialOutB)
transferData(serialOutA, serialIn, serialOutB)
if __name__ == '__main__':
main()
您编写的代码不断读取串行端口。无需占用cpu执行此恒定读取任务。根据while循环中的延迟要求,添加
睡眠
,以允许其他进程占用cpu
import serial, threading, sys, time
def transferData(serialIn, serialOutA, serialOutB):
data = serialIn.read(1024)
if data:
serialOutA.write(data)
serialOutB.write(data)
def main():
serialIn = serial.Serial(port = sys.argv[1], timeout=0, baudrate = 19200, parity=serial.PARITY_NONE, bytesize=serial.EIGHTBITS, stopbits=serial.STOPBITS_ONE)
serialOutA = serial.Serial(port = sys.argv[2], timeout=0, baudrate = 19200, parity=serial.PARITY_NONE, bytesize=serial.EIGHTBITS, stopbits=serial.STOPBITS_ONE)
serialOutB = serial.Serial(port = sys.argv[3], timeout=0, baudrate = 19200, parity=serial.PARITY_NONE, bytesize=serial.EIGHTBITS, stopbits=serial.STOPBITS_ONE)
while True:
transferData(serialIn, serialOutA, serialOutB)
transferData(serialOutA, serialIn, serialOutB)
time.sleep(1)
if __name__ == '__main__':
main()
您编写的代码不断读取串行端口。无需占用cpu执行此恒定读取任务。根据while循环中的延迟要求,添加
睡眠
,以允许其他进程占用cpu
import serial, threading, sys, time
def transferData(serialIn, serialOutA, serialOutB):
data = serialIn.read(1024)
if data:
serialOutA.write(data)
serialOutB.write(data)
def main():
serialIn = serial.Serial(port = sys.argv[1], timeout=0, baudrate = 19200, parity=serial.PARITY_NONE, bytesize=serial.EIGHTBITS, stopbits=serial.STOPBITS_ONE)
serialOutA = serial.Serial(port = sys.argv[2], timeout=0, baudrate = 19200, parity=serial.PARITY_NONE, bytesize=serial.EIGHTBITS, stopbits=serial.STOPBITS_ONE)
serialOutB = serial.Serial(port = sys.argv[3], timeout=0, baudrate = 19200, parity=serial.PARITY_NONE, bytesize=serial.EIGHTBITS, stopbits=serial.STOPBITS_ONE)
while True:
transferData(serialIn, serialOutA, serialOutB)
transferData(serialOutA, serialIn, serialOutB)
time.sleep(1)
if __name__ == '__main__':
main()
为什么要重定向串行端口而不是直接连接它们?您是否计划解析或注入数据?为什么要重定向串行端口而不是直接连接它们?您是否计划解析或注入数据?