измерить время выполнения вызовов командной строки - PullRequest
11 голосов
/ 04 января 2011

Я пишу сценарий Ruby 1.9.2 для оценки времени выполнения различных вызовов внешней командной строки.

Я использовал метод ruby ​​Process.system для выполнения вызовов командной строки и попытался зафиксировать время выполнения следующим образом:

start = Time.now
system("./script1", "argX")

puts "Duration: #{Time.now - start} seconds"

Теперь у меня проблема в том, что продолжительность не отражает время выполнения внешнего процесса, а время выполнения "системного" вызова.

Есть идеи, как измерить время выполнения внешнего процесса?

Ответы [ 3 ]

12 голосов
/ 04 января 2011

Хорошо.Если я понимаю, что вы пытаетесь сделать, вы хотите узнать, сколько времени займет выполнение вызова "./script1"?

Одна вещь, которую вы, возможно, захотите сделать, это использовать библиотеку benchmark (стандартно).

require 'benchmark'

Benchmark.bm (7) do |x|
  x.report ("script1:") {system("./script1", "argX")}
end

, которая будет генерировать отчет с пользовательским и системным временем,что может быть тем, что вы хотите.

3 голосов
/ 25 августа 2011

Вы можете использовать time и анализировать результаты

require 'open3'

command = './script1 argX'

stdout,stderr,status = Open3.capture3("time #{command}")

results = {}
stderr.split("\n").each do |line|
  unless line.blank?
    result_type,result = line.split("\t")
    results[result_type] = result
  end
end
puts "Clock time was #{results['real']}"

time выводит формат, подобный

real    0m0.003s
user    0m0.001s
sys 0m0.002s

, и выводит его на стандартную ошибку, поэтому нам нужно использовать Open3, чтобы получить его (и дифференцировать его от выходных данных вашего скрипта, которые, мы надеемся, не будут конфликтовать с выходными данными time).

Обратите внимание, чтоtime имеет «форматированный» вывод за прошедшее время, поэтому вам может потребоваться выполнить некоторый анализ, чтобы перевести его в необработанный формат в миллисекундах.

2 голосов
/ 04 января 2011

Если я правильно понимаю, вы хотите рассчитать время выполнения Ruby-процесса вашим скриптом Когда вы работаете в системе * nix, вы можете использовать утилиту time. Затем вы можете сделать следующее: time ruby *yourscript*

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...