windows pySerial -是否有方法一次选择多个端口?

wmomyfyw  于 2023-08-07  发布在  Windows
关注(0)|答案(1)|浏览(119)

我正在开发需要与许多串行端口通信的应用程序。我还没有找到一种方法来做到这一点,而不使用线程每端口。有没有一种方法可以做到这一点与单线程?例如同时选择或轮询多个端口?我用的是pyserial 2.6

goqiplq2

goqiplq21#

我假设你是在一个类似Unix的平台上使用PySerial。
由于PySerial对象实现了fileno()来获取底层的文件描述符,因此可以将它们直接传递给select(),这样就可以同时处理多个PySerial对象。
另一种方法是以非阻塞(读)模式打开Serial对象(通过传递timeout=0),并处理读取和写入可能返回errno.EWOULDBLOCK错误的事实。这可能是最简单的方法。
第三种选择是使用twisted serial ports,如果您不介意了解twisted的工作方式的话。

更新

对于Windows,除了使用线程之外,几乎唯一的选择就是使用in_waiting属性。定期轮询所有串行端口,从它们阅读in_waiting。如果有东西等待,那么你可以读取,只有那么多字节没有阻塞。
不幸的是,pyserial没有“输出缓冲区中有多少可用空间”的方法,这意味着当你写入串行端口时,你有阻塞的风险。如果您正在实现一个典型的串行端口协议,则默认的几千字节缓冲区大小将确保这通常不会成为问题。

相关问题