我有一个硬件测试设置,其中多达255个节点通过USB连接的虚拟COM端口向我的Windows系统发送跟踪消息。实际上我使用一个小的Python脚本,它在所有打开的串行端口上运行一个轮询循环,并执行一个零超时的readline。读取的行使用添加的COM端口源和时间戳打印到控制台。这几乎是实时的。但是你可以想象CPU使用率很高。所以我一直在寻找一种方法来并行实时监控所有COM端口而不进行轮询。
PySerial doc (查找nonblocking()
)表示存在POSIX之类的select接口,但仅限于UNIX操作系统。
有什么想法吗?
答案 0 :(得分:1)
我会看看扭曲,它可能会成功。它有一个由反应器运行的Serialport监视器。 (扭曲是异步的)。
我有一个小型Web服务器监控并与JeeNode(arduino克隆)通信,接收数据馈送以及将数据发送到远程无线节点。你可以在这里看到这段代码的早期剪切https://bitbucket.org/zutesmog/securitynode/src/93e29a7f3e26/SecurityConsole/secweb.py(它有点hacky,但你会得到这个想法。)
然而,这不是处理任何接近相同的流量或端口数量的地方,但它不是轮询,所以我不确定它是否会扩展,但它当然值得一试。