专栏首页python3python中程序运行计时的三种方式

python中程序运行计时的三种方式

下面这段程序截取自Python High Performance Programming(个人觉得这本书还不错,虽然有点零碎。因为我做数据分析比较多,有时候数据量大了确实也需要考虑代码优化。当然,如果数据量太大,我应该还是会毫不犹豫地用SAS。)

下面的程序里有一个benchmark函数,现在来用不同方法得出该函数的运行时间。

class Particle:

    __slots__ = ('x', 'y', 'ang_speed')

    def __init__(self, x, y, ang_speed):
        self.x = x
        self.y = y
        self.ang_speed = ang_speed

class ParticleSimulator:

    def __init__(self, particles):
        self.particles = particles

    def evolve(self, dt):
        timestep = 0.00001
        nsteps = int(dt/timestep)

        for i in range(nsteps):
            for p in self.particles:

                norm = (p.x**2 + p.y**2)**0.5
                v_x = (-p.y)/norm
                v_y = p.x/norm

                d_x = timestep * p.ang_speed * v_x
                d_y = timestep * p.ang_speed * v_y

                p.x += d_x
                p.y += d_y

from random import uniform

def benchmark():
    particles = [Particle(uniform(-1.0, 1.0),
                          uniform(-1.0, 1.0),
                          uniform(-1.0, 1.0)) 
                  for i in range(100)]

    simulator = ParticleSimulator(particles)
    simulator.evolve(0.1)
  1. 在command line中使用Unix内置的 time 命令 先在程序末尾加入: if __name__ == '__main__': benchmark() 然后运行: $ time python3 simul.py python3 simul.py 1.16s user 0.02s system 97% cpu 1.221 total
  2. 使用 timeit module You can specify the number of loops or repetitions with the options -n and -r (https://docs.python.org/2/library/timeit.html).
    1. IPyhton Shell或者Ipython Notebook中使用magic commands: %timeit: for single-line snippets %%timeit: for multi-line snippets In [1]: from simul import benchmark In [2]: %timeit benchmark() 1 loops, best of 3: 991 ms per loop 在Ipython Notebook中,我以前习惯于在一段很大的程序前加上%%timeit,现在感觉是不好的习惯。
    2. 在Command Line中使用 $ python3 -m timeit -s 'from simul import benchmark' 'benchmark()'
    3. 在程序中加入计时函数 import timeit def timing(): result = timeit.timeit('benchmark()', setup= 'from __main__ import benchmark', number=10) print(result) # Result is the time it takes to run the whole loop result = timeit.repeat('benchmark()', setup= 'from __main__ import benchmark', number=10, repeat=3) print(result) # Result is a list of times if __name__ == '__main__': timing()

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • python学习笔记:转义字符

    py3study
  • 最长公共子序列(LCS)

    py3study
  • python time 与datetim

      第一种是时间戳的方式(相对于1970.1.1 00:00:00以秒计算的偏移量),时间戳是惟一的

    py3study
  • Android各个API版本

    梦_之_旅
  • CVE-2019-7304 Ubuntu Linux 权限升级漏洞复现

    在2019年1月,国外安全人员在Ubuntu Linux的默认安装中发现了一个权限提升漏洞。这是由于snapd API中的一个错误,这是一个默认服务。任何本地用...

    墙角睡大觉
  • Canonical发起投票:Ubuntu 18.04 LTS预装哪些应用

    在 Hacker News 社区讨论即将到来的 Ubuntu 17.10(Artful Aardvark)操作系统之后,Canonical 的 Dustin K...

    Debian社区
  • Ubuntu 17.10 已经发布,图解新功能

    来源:IMCN imcn.me/html/y2017/31533....

    小小科
  • Ubuntu系统安装

    Ubuntu(友帮拓、优般图、乌班图)是一个以桌面应用为主的开源GNU/Linux操作系统,Ubuntu 是基于Debian GNU/Linux,支持x86、a...

    FPGA开源工作室
  • Greg Kroah-Hartman批评Ubuntu发行版

    Ubuntu根本就是个祸害开源社区发行版。资本家是“无利不起早”的。“新人用Ubuntu系列是最不明智的选择,因为很难利用到别人的经验。Ubuntu修改了太多东...

    Debian社区
  • Ubuntu 15.10 中文桌面版/服务器正式版下载 - 华丽免费易于入门的 Linux 操作系统

    落叶大大

扫码关注云+社区

领取腾讯云代金券