Python 等待串行端口读取的执行情况?

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

我已经编写了一个小型COM重定向和克隆python脚本,它将接收一个物理串行端口的输入,然后将它们输出到两个虚拟串行端口(其中一个是只读端口)

问题是,我注意到使用这个脚本使用了大量的CPU,大约50%,并且我启动的唯一其他应用程序是socat来创建虚拟端口

是否有任何我可能遗漏或查看的内容,可以在不引入任何超时的情况下降低CPU使用率

我使用的是树莓圆周率,基于debian的树莓操作系统

代码:

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()

为什么要重定向串行端口而不是直接连接它们?您是否计划解析或注入数据?为什么要重定向串行端口而不是直接连接它们?您是否计划解析或注入数据?