如何准确测量流经命名管道的比特率?

时间:2011-06-17 01:16:53

标签: python subprocess pipe named-pipes fifo

如果我有proc1 | proc2有没有办法准确测量流经管道的比特率,而不改变行为,好像测量设备不在那里?会发球怎么样?我想要proc1 | tee proc2 > flow_measurement_thing还是proc1 | tee flow_measurement_thing > proc2?如果我正确理解管道,默认情况下unix管道可以咀嚼4096字节,如果接收器没有像它进来那样快地读取数据,它们就会阻塞,所以我担心测量设备本身可能导致“层流”流过如果我没有正确实现它,管道将变得“动荡”。

实际的用例是用python编写的,使用来自os的命名管道。这是一个非常简化的例子

import os, subprocess
os.mkfifo('pipe')
subprocess.Popen(['convert', '-i', 'pipe', '-o', 'somewhere_else'])
subprocess.Popen(['capture', '-o', 'pipe'])

为简单起见,我们假设转换器不会修改比特率,那么我希望能够验证capture | convert | /dev/null是否以与capture | /dev/null相同的速率抽取比特

1 个答案:

答案 0 :(得分:2)

正如Corey Goldberg所说,你应该使用pv。它是一个非常好的工具,可在大多数* nix系统上使用。你可以做这些事情:

capture | pv > /dev/null
capture | convert | pv > /dev/null

pv将告诉您每种情况的吞吐量。

或者,如果capture的输出是确定性的,只需使用计时器。