pySerial – 有没有办法一次select多个端口?

我正在开发需要与许多串行端口进行通信的应用程序。 我havntfind了一种方法来做到这一点,而不使用每个端口的线程。 有没有办法做到这一点与单线程?像一次select或轮询多个端口? 我正在使用pyserial 2.6

我假设你正在Pyxial的Unix平台上使用…

由于PySerial对象实现fileno()来获取底层文件描述符,所以你可以直接将它们传递给select ,这样就可以一次处理多个PySerial对象。

另一种方法是设置nonblocking(),并处理你的读写操作可能返回errno.EWOULDBLOCK错误。 这可能是最简单的方法。

第三个选择是使用扭曲的串行端口,如果你不明白扭曲的事情。

更新

对于Windows来说,除了使用线程之外,您几乎可以使用inWaiting()方法 。 轮询所有的串口定期从他们的inWaiting()读取。 如果有东西在等待,那么你可以读取,只有很多字节没有阻塞。

不幸的是,pyserial没有“输出缓冲区有多少空闲空间”的方法,这意味着当你写入串行端口时,你有可能被阻塞。 如果您正在实现典型的串行端口协议,几千字节的默认缓冲区大小将确保这通常不是问题。