5

I am developing app that need to communicate with many serial ports. I havnt found a way to do this without using thread per port. Is there a way to do this with single thread?something like select or poll on multiple ports at once? I am using pyserial 2.6

4

1 回答 1

7

我假设您在类似 unix 的平台上使用 PySerial ...

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

另一种选择是设置nonblocking()并处理您的读取和写入可能返回 errno.EWOULDBLOCK 错误的事实。这可能是最简单的方法。

第三种选择是使用twisted 串行端口,如果您不了解twisted 做事的方式。

更新

对于 Windows,除了使用线程之外,几乎唯一的选择就是使用inWaiting() 方法。轮询所有串行端口,定期inWaiting()从它们读取。如果有东西在等待,那么您可以读取它并且只有那么多字节而不会阻塞。

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

于 2013-04-27T19:35:33.340 回答