【发布时间】:2015-10-05 17:25:53
【问题描述】:
我已经编写了一个小的 COM 重定向和克隆 python 脚本,它将接受一个物理串行端口的输入,然后将它们输出到两个虚拟串行端口(其中一个是只读的)。
问题是我注意到使用这个脚本会占用大量 CPU,大约 50%,而且我启动的唯一其他应用程序是 socat 来创建虚拟端口。
是否有任何我可能遗漏或查看的内容,可以降低 CPU 使用率,而不会引入任何类型的超时。
我使用的是 Raspberry Pi,它带有基于 debian 的 Raspian 操作系统。
代码:
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()
【问题讨论】:
-
为什么要重定向串口而不是直接连接它们?您是否打算解析或注入数据?
标签: python performance cpu-usage cpu-speed