如何从脚本运行IPython魔术(或定时Python脚本)

Iva*_*ets 48 python ipython

IPython%timeit magic命令可以很好地测量运行某些Python代码所需的时间.现在,我想在Python脚本中使用类似的东西.我知道timeit模块,但它有几个缺点,例如,如何自适应地选择运行次数?即默认代码

import timeit
t=timeit.Timer("code(f)", "from __main__ import code,f")
t.timeit() 
Run Code Online (Sandbox Code Playgroud)

运行代码数百万次.%timeit IPyhton magic命令会自动执行此操作.我建议我可以使用MATLAB代码 http://www.mathworks.com/matlabcentral/fileexchange/18798

自动完成所有工作(并且还告诉函数的开销是否很大).

如何从Python脚本中调用%timeit magic(或者可能有更好的时序解决方案)?

小智 57

这取决于你拥有哪个版本的IPython.如果你有1.x:

from IPython import get_ipython
ipython = get_ipython()
Run Code Online (Sandbox Code Playgroud)

如果您有旧版本:

import IPython.core.ipapi  
ipython = IPython.core.ipapi.get()
Run Code Online (Sandbox Code Playgroud)

要么

import IPython.ipapi  
ipython = IPython.ipapi.get()
Run Code Online (Sandbox Code Playgroud)

完成后,运行如下魔术命令:

ipython.magic("timeit abs(-42)")
Run Code Online (Sandbox Code Playgroud)

请注意,脚本必须通过运行ipython.

  • 请注意,`magic()` 方法现已弃用。改用`run_line_magic()`。另请查看`run_cell_magic()` (5认同)
  • 这适用于IPython 1.x:`from IPython import get_ipython``ipython = get_ipython()` (2认同)
  • @GBadge你需要用`ipython`而不是`python`来运行脚本.例如https://github.com/suzanshakya/cython_forloop (2认同)

C2H*_*5OH 7

既IPython的和timeit模块,当与被叫python -m timeit,随着越来越多的值执行相同的循环,直到定时结果超过某一阈值,保证时间测量大多是自由的操作系统干扰.

您可以将魔术IPython实现%timeitPython timeit标准模块进行比较,看看它们的作用大致相同.

因此,回答您的问题,您应该复制相同的循环,直到找到number参数的正确值.