包含python函数所用时间的词条

在python里用time.time判断函数的执行时间靠谱吗

使用time.time来统计函数的执行时间,程序只会执行一次,存在很大的随机因素。

创新互联建站主要从事网站设计制作、成都网站设计、网页设计、企业做网站、公司建网站等业务。立足成都服务坊子,10年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:13518219792

timtit包就可以重复执行函数多次,然后将多次执行结果取平均值。相比起来更优。

然而程序执行时间很大程度还受计算机性能的影响,衡量程序好坏更靠谱的手段是计算时间复杂度。

python函数深入浅出 16.time.sleep()函数详解

time.sleep() 函数命名来源于英文单词time(时间)和sleep(睡眠)。

time 是python带的非内置库,使用时需要import,主要用于处理和时间相关的操作。

time.sleep用于给定时间内挂起(等待)当前线程的执行。

time.sleep() 函数的例子:

可以注释掉time.sleep(2)再运行一次对比一下

可以看到虽然都是打印出一样的结果,但time.sleep()加入了等待时间

这里还要解释一下python中线程与进程的区别。

举个例子,厨房做菜看成是一个进程,那么这个进程下面就可能有多个人或一个人(cpu基本执行单元,即线程)来执行,多个人可以分别洗菜,刷碗,摆盘等等同时作业,他们又是共享这个厨房的资源的。每个人存在一定的资源竞争关系,比如炉火只有1个。

这里time.sleep是针对线程执行的,也就是其中一个人去sleep睡觉了,不影响其他人的继续工作。

参数

该函数没有返回值。

结果类似如下:

可以看到秒数相差了5

time.sleep()常用于推迟执行的场景

在python中,与时间相关的模块有:time,datetime以及calendar

对基础运行环境有疑问的,推荐参考: python函数深入浅出 0.基础篇

python 打印出函数执行所用时间

使用timeit模块,先介绍下:

timeit 模块

timeit 模块定义了接受两个参数的 Timer 类。两个参数都是字符串。 第一个参数是你要计时的语句或者函数。 传递给 Timer 的第二个参数是为第一个参数语句构建环境的导入语句。 从内部讲, timeit 构建起一个独立的虚拟环境, 手工地执行建立语句,然后手工地编译和执行被计时语句。

一旦有了 Timer 对象,最简单的事就是调用 timeit(),它接受一个参数为每个测试中调用被计时语句的次数,默认为一百万次;返回所耗费的秒数。

Timer 对象的另一个主要方法是 repeat(), 它接受两个可选参数。 第一个参数是重复整个测试的次数,第二个参数是每个测试中调用被计时语句的次数。 两个参数都是可选的,它们的默认值分别是 3 和 1000000。 repeat() 方法返回以秒记录的每个测试循环的耗时列表。Python 有一个方便的 min 函数可以把输入的列表返回成最小值,如: min(t.repeat(3, 1000000))

你可以在命令行使用 timeit 模块来测试一个已存在的 Python 程序,而不需要修改代码。

再给你个例子,你就知道怎么做了。

# -*- coding: utf-8 -*-

#!/bin/env python

def test1():

n=0

for i in range(101):

n+=i

return n

def test2():

return sum(range(101))

def test3():

return sum(x for x in range(101))

if __name__=='__main__':

from timeit import Timer

t1=Timer("test1()","from __main__ import test1")

t2=Timer("test2()","from __main__ import test2")

t3=Timer("test3()","from __main__ import test3")

print t1.timeit(1000000)

print t2.timeit(1000000)

print t3.timeit(1000000)

print t1.repeat(3,1000000)

print t2.repeat(3,1000000)

print t3.repeat(3,1000000)

pythonmktime 函数 时区

这个问题得分成几个子问题

1 数据库本身的时区

2 数据库里数据的时区

3 python代码里的时区

首先对1你可以通过命令去设置数据库的时区 像mysql直接用sql语句就能设置

其次对2 在存储时间时尽量用timestamp去存储 这样读出来可以方便的转成所需用的时区的时间

3 python自己的时区 比如你用datetime生成时间时需要每次都记得时区设置 在django和flask里设置好默认时区

做好这三点才能保证程序和数据库和数据的时区保持统一

7种检测Python程序运行时间、CPU和内存占用的方法

1. 使用装饰器来衡量函数执行时间

有一个简单方法,那就是定义一个装饰器来测量函数的执行时间,并输出结果:

import time

from functoolsimport wraps

import random

def fn_timer(function):

@wraps(function)

def function_timer(*args, **kwargs):

  t0= time.time()

  result= function(*args, **kwargs)

  t1= time.time()

  print("Total time running %s: %s seconds" %

      (function.__name__, str(t1- t0))

)

  return result

return function_timer

@fn_timer

def random_sort(n):

return sorted([random.random() for i in range(n)])

if __name__== "__main__":

random_sort(2000000)

输出:Total time running random_sort: 0.6598007678985596 seconds

使用方式的话,就是在要监控的函数定义上面加上 @fn_timer 就行了

或者

# 可监控程序运行时间

import time

import random

def clock(func):

def wrapper(*args, **kwargs):

    start_time= time.time()

    result= func(*args, **kwargs)

    end_time= time.time()

    print("共耗时: %s秒" % round(end_time- start_time, 5))

    return result

return wrapper

@clock

def random_sort(n):

return sorted([random.random() for i in range(n)])

if __name__== "__main__":

random_sort(2000000)

输出结果:共耗时: 0.65634秒

2. 使用timeit模块

另一种方法是使用timeit模块,用来计算平均时间消耗。

执行下面的脚本可以运行该模块。

这里的timing_functions是Python脚本文件名称。

在输出的末尾,可以看到以下结果:4 loops, best of 5: 2.08 sec per loop

这表示测试了4次,平均每次测试重复5次,最好的测试结果是2.08秒。

如果不指定测试或重复次数,默认值为10次测试,每次重复5次。

3. 使用Unix系统中的time命令

然而,装饰器和timeit都是基于Python的。在外部环境测试Python时,unix time实用工具就非常有用。

运行time实用工具:

输出结果为:

Total time running random_sort: 1.3931210041 seconds

real 1.49

user 1.40

sys 0.08

第一行来自预定义的装饰器,其他三行为:

real表示的是执行脚本的总时间

user表示的是执行脚本消耗的CPU时间。

sys表示的是执行内核函数消耗的时间。

注意:根据维基百科的定义,内核是一个计算机程序,用来管理软件的输入输出,并将其翻译成CPU和其他计算机中的电子设备能够执行的数据处理指令。

因此,Real执行时间和User+Sys执行时间的差就是消耗在输入/输出和系统执行其他任务时消耗的时间。

4. 使用cProfile模块

5. 使用line_profiler模块

6. 使用memory_profiler模块

7. 使用guppy包

Python测量程序运行时间,time.time与time.clock

现象描述:

1、time.clock 在win系统和linux系统下对相同程序的计时结果不一致

2、到底应该用什么时间计时?为什么用time.time与time.clock计时会有那么大的差异

在计算机领域有多种时间。

第一种称作CPU时间或执行时间,用于测量在执行一个程序时CPU所花费的时间。第二种称作挂钟时间,测量执行一个程序时的总时间。挂钟时间也被称作流逝时间或运行时间。与CPU时间相比,挂钟时间通常长些,因为CPU执行测量的程序可能同时还在执行其它程序的指令。

另一个重要概念是所谓的系统时间,由系统时钟测量。系统时间表示计算机系统时间传递的概念。要记住系统时钟是可以由操作系统修改的,就是修改系统时间。

在Unix系统上,time.time的作用与Windows相同,但time.clock的意义不同。

在Unix系统上,time.clock以秒为单位返回当前处理器时间,例如,执行当前线程所花费的CPU时间。而在Windows上,它是以秒为单位的返回自首次调用该函数以来所流逝的系统时间。

以我遇到的Ubuntu系统上运行time.time和time.clock的例子:

time.time()显示系统时间过去大概1秒,而time.clock()显示花费在当前进程上的CPU时间只有于1毫秒。

而win下time.time()和time.clock()显示系统时间都是大致过去了1秒

在测量程序准确性能时应该使用哪一个呢?

这要视情况而定。如果程序运行的系统能够提供足够的资源给程序,例如,一个运行基于Python的web应用程序的web服务器,则使用time.clock()来测量程序会更有意义,因这个web应用程序可能是服务器上的主要程序 。如果程序运行的系统上还同时运行着其它大量程序,则使用time.time()进行测量会更有意义。 如果不是这样,就应该使用基于挂钟的计时器来测量程序的性能,因为这样通常能反应程序的环境。

放结论,一般情况下:

1、win用time.clock或time.time

2、linux 下用time.time  或 datetime.datetime.now().timestamp()

【1】(重要)    Python测量时间,用time.time还是time.clock 


分享标题:包含python函数所用时间的词条
URL网址:http://hbruida.cn/article/hjgogs.html