Incompatibilité entre le %de temps et %timeit dans IPython

Je suis confronté à une situation bizarre que je ne peux pas l'expliquer. Voici mon test de synchronisation de la génération d'une grande liste de tuples:

In [1]: def get_list_of_tuples():
   ...:     return [(i,) for i in range(10**6)]
   ...:

In [2]: %time res = get_list_of_tuples()
CPU times: user 0.93 s, sys: 0.08 s, total: 1.01 s
Wall time: 0.98 s

In [3]: %timeit res = get_list_of_tuples()
1 loops, best of 3: 92.1 ms per loop

Comme vous pouvez le voir, la génération de cette grande liste de tuples prend juste en dessous d'un deuxième. timeit rapports, le temps d'exécution à l'ordre de 0,1 seconde. Pourquoi est-il une si grande différence dans les deux rapports?

(Testé sur IPython 0.11, Python 2.6.5.)

  • Vous obtenez le même résultat si vous exécutez %timeit premier et le %de temps de la deuxième?
  • Intéressant commentaire. Oui, j'obtiens des résultats similaires avec une inversion de l'ordre d'exécution.
  • Je ne sais pas IronPython, donc je ne peux pas en dire beaucoup sur %time ou %timeit, mais j'imagine que %time répète le test de chronométrage 10 fois.
  • Je ne suis pas à l'aide de IronPython, mais IPython. Aussi %timeit est la fonction qui exécute la commande plusieurs fois, pas %du temps.
  • %timeit fait un best of des 3 pistes, donc ce n': for i in range(3): %time res=get_list_of_tuples() vous obtenez? Pour cette raison, il est normal qu' %timeit de rapport des nombres plus petits (en général, je vois ~2x), mais 10x, c'est beaucoup. Je ne suppose pas que vous êtes sur Windows?
  • J'ai testé ce code sur Linux (CentOS 5 et 6, Ubuntu, Mac OS X) et obtenir des résultats similaires sur tous les OS. L'exécution de %de temps de plusieurs ne change pas les résultats.

InformationsquelleAutor badzil | 2011-12-23