我正在开发需要与许多串行端口通信的应用程序。我还没有找到一种方法来做到这一点而不使用每个端口的线程。有没有办法用单线程来做到这一点?比如同时在多个端口上选择或轮询?我正在使用 pyserial 2.6
我假设您在类 Unix 平台上使用 PySerial...
Since PySerial 对象实现fileno()要获取底层文件描述符,您可以将它们直接传递到select()这将允许您同时处理多个 PySerial 对象。
另一种选择是打开Serial
对象处于非阻塞(读取)模式(通过传递timeout=0
)并处理您的读取和写入可能返回的事实errno.EWOULDBLOCK
错误。这可能是最简单的方法。
第三种选择是使用扭曲的串行端口如果你不介意以扭曲的方式做事的话。
Update
对于 Windows,除了使用线程之外,几乎唯一的选择就是使用in_waiting财产。定期轮询所有串行端口读取in_waiting
从他们。如果有东西在等待,那么您可以读取该内容,并且只能读取那么多字节而不会阻塞。
不幸的是,pyserial 没有“输出缓冲区中有多少可用空间”方法,这意味着当您写入串行端口时,您有阻塞的风险。如果您正在实现典型的串行端口协议,则几千字节的默认缓冲区大小将确保这通常不是问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)