Fazendo Benchmarks em Python

Um pequeno script que fiz em python. Para usá-lo, rode:

python time-it.py <número de vezes> <comando>

Por exemplo, para saber a média de se executar a.out 5 vezes:

python time-it.py 5 ./a.out

Ele calcula o tempo que demorou para executar o comando e depois calcula uma média aritmética e uma média desconsiderando o valor mais alto e o mais baixo.

O Código

#!/usr/bin/env python
import time
import sys
import subprocess
import math
 
if len(sys.argv) < 3:
  print "time-it.py <num of runs> <what to run>"
  exit()
 
runs = int(sys.argv[1])
command = sys.argv[2:]
 
def mean(lst):
  global runs
  return (math.fsum(lst) / float(runs))
 
def san_mean(lst):
  global runs
  lst.sort()
 
  return (math.fsum(lst[1:-1]) / float(runs-2))
 
time.sleep(2)
 
count = 0
timing = []
while count < runs:
  t1 = time.time()
  subprocess.call(command)
  t2 = time.time()
 
  timing.append(t2-t1)
  count += 1
  time.sleep(1)
 
count = 0
print " ".join(command)
while count < runs:
  print "%g" % timing[count]
  count += 1
 
print "mean: %g" % mean(timing)
print "sanatized mean: %g" % san_mean(timing)
print #linha em branco

Pode-se questionar a necessidade dos sleeps, mas fiz assim para que o processo de carregar o python não interferisse nos resultados, e para que uma execução não interferisse na outra.

Page tags: benchmark python
page_revision: 1, last_edited: 1238073738|%e %b %Y, %H:%M %Z (%O ago)
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License