gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 20:17:01 25 4
gpt4 key购买 nike

使用 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()

输出:

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

Process finished with exit code 0

使用 time.time() 给出非负值(如此处标记的 Timer shows negative time elapsed )但我很好奇 python multiprocessing 中的 time.clock() 和从 CPU 读取时间的问题是什么。

最佳答案

多处理 生成 进程和time.clock()在 linux 上与 C 的 clock() 具有相同的含义:

The value returned is the CPU time used so far as a clock_t;

因此,当进程启动时,clock 返回的值从 0 重新开始。但是,您的代码使用父级进程start_time 来确定子进程花费的时间,如果子进程 CPU 时间重置,这显然是不正确的。

clock() 函数在处理一个进程时有意义,因为它的返回值是花费的CPU时间那个过程。子进程被考虑在内。

另一方面,time() 函数使用系统范围的时钟,因此甚至可以在不同的进程之间使用(尽管它不是单调的,所以如果有人在事件期间更改系统时间,它可能会返回错误的结果。

fork 一个正在运行的 python 实例可能比从头开始一个新实例更快,因此 start_time 几乎总是大于 time.clock() 返回的值。考虑到父进程还必须读取磁盘上的文件、执行可能需要读取其他 .py 文件、搜索目录等的导入。 fork 的子进程不必执行所有这些操作。


显示 time.clock() 的返回值重置为 0 的示例代码:

from __future__ import print_function

import time
import multiprocessing

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


def lol():
for i in data:
t = time.clock()
print('t: ', t, end='\t')
print(t - start_time, "lol seconds")


def worker(n):
t = time.clock()
print('t: ', t, end='\t')
print(t - start_time, "multiprocesor seconds")


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

if __name__ == '__main__':
print('start_time', start_time)
lol()
mp_handler()

结果:

$python ./testing.py 
start_time 0.020721
t: 0.020779 5.8e-05 lol seconds
t: 0.020804 8.3e-05 lol seconds
t: 0.001036 -0.019685 multiprocesor seconds
t: 0.001166 -0.019555 multiprocesor seconds

请注意 tlol 情况下是单调的,而在其他情况下返回 0.001

关于python - Python 多处理脚本中的打印时间返回负时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23323198/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com