3

我有两个进程一个 C 和一个 python。C 进程花费时间将数据传递到命名管道,然后 python 进程读取该管道。应该非常简单,并且当我每秒传递一次数据(当前是时间戳,例如“Mon Aug 19 18:30:59 2013”​​)时它工作正常。

当我取出睡眠时出现问题(1);C进程中的命令。当没有一秒钟的延迟时,通信很快就会被搞砸。python 进程将读取多条消息或报告它已读取数据,即使其缓冲区为空。此时C进程通常会发生炸弹。

在我发布任何示例代码之前,我想知道是否需要在双方实现某种同步。就像可能告诉 C 进程不要写入 fifo 如果它不为空?

C 进程以只读方式打开命名管道,python 进程以只读方式打开。

这两个过程都旨在作为循环运行。C 进程不断读取通过 USB 端口传入的数据,python 进程获取每个“消息”并在将其发送到 SQL Db 之前对其进行解析。

如果我要每秒查看多达 50 条消息,命名管道是否能够处理该级别的事务率?每个事务的大小相对较小(20 字节左右),但频率让​​我想知道我是否应该研究其他形式的进程间通信,例如共享内存?

任何建议表示赞赏。如有必要,我可以发布代码,但目前我只是想知道我是否应该以某种方式在两个进程之间同步。

谢谢!

4

1 回答 1

2

管道是流。

发送方的write()调用次数不一定要与read()接收方的s个数对应。

尝试实现某种同步协议。

如果发送纯文本,您可以这样做,例如通过在每个令牌之间添加换行符并让接收器读取直到找到其中一个。

或者,您可以在每个发送的数据前面加上一个固定长度的数字,代表即将到来的数据量。然后接收器可以解析这种格式。

于 2013-08-19T18:08:50.590 回答