相关疑难解决方法(0)

测量python中的已用时间

是否有一个简单的方法/模块来正确测量python中的已用时间?我知道我可以简单地调用time.time()两次并消除差异,但如果系统时间改变,那将产生错误的结果.当然,这不会经常发生,但它确实表明我在测量错误的东西.

使用time.time()测量持续时间,当你想想这是令人难以置信的回旋.您可以通过持续时间测量(由计时器执行)和已知绝对时间(手动设置或通过ntp设置)构建两个绝对时间测量值的差值,您根本不感兴趣.

那么,有没有办法直接查询这个"计时器时间"?我想它可以表示为没有有意义的绝对表示的毫秒或微秒值(因此不需要用系统时间进行调整).看一下似乎这正是System.nanoTime()Java中的内容,但我没有找到相应的Python函数,即使它应该(硬件技术上)比提供更容易time.time().

编辑:为了避免混淆并解决以下答案:这不是关于DST更改,我也不想要CPU时间 - 我想要经过的物理时间.它不需要非常细粒度,甚至不是特别准确.它只是因为有人决定将系统时钟设置为不同的值,所以不应该给我负的持续时间或者持续时间偏离几个数量级(高于粒度).以下是Python文档关于'time.time()'的内容:

"虽然此函数通常返回非递减值,但如果在两次调用之间设置了系统时钟,则它可以返回比先前调用更低的值"

这正是我想要避免的,因为它可能导致奇怪的事情,如时间计算中的负值.我现在可以解决这个问题,但我相信在可行的情况下学习使用适当的解决方案是一个好主意,因为有一天克拉奇会回来咬你.

编辑2:一些研究表明,你可以通过使用GetTickCount64()在Windows中获得我想要的系统时间独立测量,在Linux下你可以在times()的返回值中得到它.但是,我仍然找不到在Python中提供此功能的模块.

python windows time duration

49
推荐指数
5
解决办法
7万
查看次数

Python多处理脚本中的打印时间返回负时间

使用Python 2.7.6Ubuntu 14上运行它

我简化了脚本以显示我的问题:

import time
import multiprocessing

data = range(1, 3)
start_time = time.clock()


def lol():
    for i in data:
        print time.clock() - start_time, "lol seconds"


def worker(n):
    print time.clock() - start_time, "multiprocesor seconds"


def mp_handler():
    p = multiprocessing.Pool(1)
    p.map(worker, data)

if __name__ == '__main__':
    lol()
    mp_handler()
Run Code Online (Sandbox Code Playgroud)

并输出:

8e-06 lol seconds
6.9e-05 lol seconds
-0.030019 multiprocesor seconds
-0.029907 multiprocesor seconds

    Process finished with exit code 0
Run Code Online (Sandbox Code Playgroud)

使用 time.time()给出非负值(如此处标记的Timer显示负时间已过)但我很好奇time.clock()python中的问题multiprocessing和从CPU读取时间.

python time multiprocessing python-2.7

9
推荐指数
1
解决办法
3463
查看次数

我的功能需要消极时间才能完成.世界上发生了什么?

我主要是出于好奇而提出这个问题.我写了一些代码,这些代码正在做一些非常耗时的工作.所以,在执行我的workhorse函数之前,我把它包装成了对time.clock()的几次调用.它看起来像这样:

t1 = time.clock()
print this_function_takes_forever(how_long_parameter = 20)
t2 = time.clock()
print t2 - t1
Run Code Online (Sandbox Code Playgroud)

这很好.我的功能正确返回并t2 - t1给了我一个972.29或大约16分钟的结果.

但是,当我将代码更改为此时

t1 = time.clock()
print this_function_takes_forever(how_long_parameter = 80)
t2 = time.clock()
print t2 - t1
Run Code Online (Sandbox Code Playgroud)

我的功能仍然很好,但结果t2 - t1是:

None
-1741
Run Code Online (Sandbox Code Playgroud)

我很好奇实施细节导致了什么.None和负数都让我感到困惑.它与签名类型有关吗?这是None怎么解释的?

python time timing

3
推荐指数
1
解决办法
1404
查看次数

标签 统计

python ×3

time ×3

duration ×1

multiprocessing ×1

python-2.7 ×1

timing ×1

windows ×1