我正在开发需要与许多串口通信的应用程序。我没有找到一种方法来做到这一点,而不使用每个端口的线程。有没有办法用单线程执行此操作?类似于多个端口上的select或poll一样?我正在使用pyserial 2.6
答案 0 :(得分:6)
我假设您在类似unix的平台上使用PySerial ......
由于PySerial objects implement fileno()获取底层文件描述符,你可以直接将它们传递给select,这样你就可以同时处理多个PySerial对象。
另一种替代方法是设置nonblocking()并处理您的读写可能返回errno.EWOULDBLOCK错误的事实。这可能是最简单的方法。
第三种选择是使用twisted serial ports,如果你不想让你的头绕扭曲做事。
<强>更新强>
对于Windows,除了使用线程之外,几乎唯一的替代方法是使用inWaiting() method。定期轮询所有串口,从中读取inWaiting()
。如果有东西等待,那么你可以读取那个而且只有那么多字节而不会阻塞。
不幸的是,pyserial没有&#34;输出缓冲区中有多少可用空间&#34;方法,这意味着当您写入串行端口时,您有被阻止的风险。如果您正在实现典型的串行端口协议,那么几千字节的默认缓冲区大小将确保这通常不是问题。