readProcess
(パッケージから) sshコマンドを実行しSystem.Process
ていますが、実行にかかる時間を計測し、コマンド出力と一緒に出力したいと思います。
これをcriteriaで正確に計時することは可能ですが、criteriaは、余分な出力を印刷するだけでなく、多くのセットアップとティアダウンを行うのに時間を費やしているようです。完全なベンチマークを実行するつもりはありません。sshコマンドの実行にかかった時間を表示するだけです。
これまでパッケージを試しましたSystem.TimeIt
が、結果が正しくありません。たとえば、これは少なくとも5秒(実行中sleep 5
)を報告する必要があります。
>>> timeIt $ readProcess "sleep" ["5"] []
CPU time: 0.04s
内部で行われていることSystem.TimeIt
は次のとおりです。
-- |Wrap an 'IO' computation so that it prints out the execution time.
timeIt :: IO a -> IO a
timeIt ioa = do
(t, a) <- timeItT ioa
printf "CPU time: %6.2fs\n" t
return a
-- |Wrap an 'IO' computation so that it returns execution time is seconds as well as the real value.
timeItT :: IO a -> IO (Double, a)
timeItT ioa = do
t1 <- getCPUTime
a <- ioa
t2 <- getCPUTime
let t :: Double
t = fromIntegral (t2-t1) * 1e-12
return (t, a)
簡単そうに見えますが、強制的に実行する方法がわかりませんa <- ioa
。で注釈を付け!
ても違いはないようです。
ありがとう!