timeit 在 python manage.py shell 中不工作
timeit is not working in the python manage.py shell
我必须找到在 Django 项目中 运行 查询所花费的时间,即 python manage.py shell
代码:
>>> import timeit
>>> d = {"a":1, "b":2}
>>> def a1():
... for i in d:
... a = i, d[i]
...
>>> a1()
>>> print "Time 1:", timeit.timeit('a1()', 'from __main__ import a1 as a1')
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/usr/lib64/python2.6/timeit.py", line 227, in timeit
return Timer(stmt, setup, timer).timeit(number)
File "/usr/lib64/python2.6/timeit.py", line 193, in timeit
timing = self.inner(it, self.timer)
File "<timeit-src>", line 3, in inner
ImportError: cannot import name a1
Time 1: >>>
这不适用于 python manage.py shell
但这是工作文件 我在 py 文件和 运行 我的命令行中编写代码。
from __main__ import a1 as a1
有问题
我也遇到过同样的问题,一直没有找到真正的解决办法。对于几行代码(如示例中的代码)有效的方法是将它们直接放在 timeit():
的 setup
参数中
>>> setup = 'd={"a":1, "b":2}\ndef a1():\n for i in d:\n a = i, d[i]\n'
>>> print "Time 1:", timeit.timeit('a1()', setup)
Time 1: 0.337239027023
然而,虽然这无助于解释为什么 timeit
中的导入在 django shell 中不起作用,但为什么不实现您自己的计时功能?
>>> import time
>>> def time_function(fnc, number=10**6):
>>> start = time.time()
>>> for i in xrange(number):
>>> fnc()
>>> return time.time() - start
>>> print "Time 1:", time_function(a1)
Time 1: 0.3310558795928955
timeit
在不同的上下文中执行,因此它无法访问您 import/define.
的符号
为此,您可以:
使用其构造函数的 setup
参数。
timeit.timeit("a1()", setup="from __main__ import a1 as a1")
使用其构造函数的globals
参数(Python>=3.5)传递全局命名空间
timeit.timeit("a1()", globals=globals())
有关详细信息,请参阅 doc。
我必须找到在 Django 项目中 运行 查询所花费的时间,即 python manage.py shell
代码:
>>> import timeit
>>> d = {"a":1, "b":2}
>>> def a1():
... for i in d:
... a = i, d[i]
...
>>> a1()
>>> print "Time 1:", timeit.timeit('a1()', 'from __main__ import a1 as a1')
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/usr/lib64/python2.6/timeit.py", line 227, in timeit
return Timer(stmt, setup, timer).timeit(number)
File "/usr/lib64/python2.6/timeit.py", line 193, in timeit
timing = self.inner(it, self.timer)
File "<timeit-src>", line 3, in inner
ImportError: cannot import name a1
Time 1: >>>
这不适用于 python manage.py shell
但这是工作文件 我在 py 文件和 运行 我的命令行中编写代码。
from __main__ import a1 as a1
有问题
我也遇到过同样的问题,一直没有找到真正的解决办法。对于几行代码(如示例中的代码)有效的方法是将它们直接放在 timeit():
的setup
参数中
>>> setup = 'd={"a":1, "b":2}\ndef a1():\n for i in d:\n a = i, d[i]\n'
>>> print "Time 1:", timeit.timeit('a1()', setup)
Time 1: 0.337239027023
然而,虽然这无助于解释为什么 timeit
中的导入在 django shell 中不起作用,但为什么不实现您自己的计时功能?
>>> import time
>>> def time_function(fnc, number=10**6):
>>> start = time.time()
>>> for i in xrange(number):
>>> fnc()
>>> return time.time() - start
>>> print "Time 1:", time_function(a1)
Time 1: 0.3310558795928955
timeit
在不同的上下文中执行,因此它无法访问您 import/define.
为此,您可以:
使用其构造函数的 setup
参数。
timeit.timeit("a1()", setup="from __main__ import a1 as a1")
使用其构造函数的globals
参数(Python>=3.5)传递全局命名空间
timeit.timeit("a1()", globals=globals())
有关详细信息,请参阅 doc。