为什么 time.clock 给出的经过时间比 time.time 更长?

2023-11-25

我在 Ubuntu 上使用了一段 python 代码的计时time.clock and time.time:

clock elapsed time: 8.770 s
time  elapsed time: 1.869 s

我知道 time.time 使用系统时间,time.clock 使用处理器时钟。当 time.time 给出比 time.clock 更大的经过时间时,这对我来说是有意义的:处理器在整个时间内都没有处于活动状态(例如,调用 time.time 的时间)time.sleep).

但是为什么/什么时候处理器时钟会给出如此多的经过时间greater比系统时间呢?


addendum

我使用标准映射、进程池映射和线程池映射对计算相同的函数进行了粗略测试。可以理解的是,进程池更快,线程池更慢。更有趣的是:时钟计时是less比处理器池的时间计时但是greater在线程池中。

再次,我理解为什么处理器池的时钟计时较少:大概主进程不做太多事情,只是等待池进程完成。但为什么时钟计时更多的是用线程池呢?有什么见解吗?

Results:

map
  time  1738.8
  clock 1739.6
mp pool
  time   580.1
  clock   15.9
thread pool
  time  3455.3
  clock 5378.9

Code:

from time import clock, sleep, time
from multiprocessing.pool import ThreadPool
from multiprocessing import Pool
import random

def f(i):
    x = [random.random() for j in range(100000)]
    return x[i]

def t(fn):
    t0, c0 = time(), clock()
    for i in range(10): fn(f,range(16))
    print '  time ', round(1000*(time()-t0),1)
    print '  clock', round(1000*(clock()-c0),1)

if __name__ == '__main__':
    print 'map'
    t(map)

    pool = Pool(8)
    print 'mp pool'
    t(pool.map)

    pool = ThreadPool(8)
    print 'thread pool'
    t(pool.map)

如果在多个 CPU 上执行,CPU 时间可能会超过实际运行时间。我没有在 Python 中具体看到过这一点,但在使用时我确实看到过这一点clock来自 C 的具有多个线程的函数,大概 Python 代码只是直接调用这个 C 函数。

关于“为什么”:你的思考方式是错误的。重要的是how many核心正在运行您的程序。如果一个核心在两秒的挂起时间内运行一秒,这对您来说是有意义的,但如果四个核心在同一时间间隔内各运行一秒呢?那么 2 秒的墙上时间中有 4 秒的 CPU 时间。内核占用测量所有内核的 CPU 时间。如果多个核心在同一秒内运行,那么您在那一秒内花费了多个 CPU 秒。这就是对调度程序来说很重要的成本衡量标准,大概也是clock是建立在.这可能不是您关心的指标,但这就是它的工作原理。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 time.clock 给出的经过时间比 time.time 更长? 的相关文章

随机推荐

  • 如何删除ListBox中的多个选定项?

    我的 Windows 窗体包含两个列表框 Listbox1 包含一些项目 listbox2 为空 当我按下表单上的按钮时 应将 listbox1 中的多个选定项目从 Listbox1 中删除并复制到 Listbox2 中 我尝试在 list
  • JavaScript WeakMap 不断引用经过 gc 处理的对象

    我正在经历 JavaScript 弱映射 在 google chrome 开发者控制台中尝试此代码后 使用 js flags expose gc 运行 我不明白为什么弱映射继续引用 a b 如果 a 是GC 编辑 var a listene
  • Java中Arraylist转Json的方法

    我有一个数组列表 数组列表包含一堆域对象 如下图所示 Domain domainId 19 name a dnsName a com type 0 flags 0 Domain domainId 20 name b dnsName b co
  • 如何在客户端-服务器 PlayN 游戏中处理 RPC?

    我想使用 PlayN 创建客户端 服务器纸牌游戏 例如心 虽然我主要关注 HTML5 输出 但我希望与输出平台无关 以防我将来决定制作 Android 客户端 我应该如何处理RPC机制 这些是我想到的选项 通过 get post 方法将 J
  • Dynamodb:使用两个以上属性的查询

    在 Dynamodb 中 您需要在索引中指定可用于进行查询的属性 如何使用两个以上的属性进行查询 使用 boto 的示例 Table create users schema HashKey id defaults to STRING dat
  • 在 MKMapView 上移动/更新 MKOverlay

    有没有办法更新 即移动 aMKOverlay已经添加到MKMapView 删除旧的并添加新的非常糟糕 慢 即我想当覆盖物在屏幕上移动时触发调用此函数的后台函数 MKOverlayView mapView MKMapView mapView
  • 从远程 git 存储库获取单个文件

    有没有一种方法可以在 Java 中以编程方式从远程 git 存储库下载单个文件 我更喜欢使用尽可能少的带宽的解决方案 最好只下载单个文件 我不需要浏览存储库 我已经有了文件的路径 我更喜欢不依赖于其他应用程序的解决方案 例如 在计算机上安装
  • 如何启动和应用程序选择器

    该应用程序的任务是隐式激活一个单独的应用程序来查看 URL http www google com 因此 应用程序选择器应该出现并让我在至少两个浏览器之间进行选择 默认浏览器将向我显示 www google com 网站 另一个简单的 浏览
  • 需要 C# 中的 BouncyCastle PGP 文件加密示例

    我正在尝试使用我的私钥 ascii 格式 和任何其他公钥 也是 ascii 格式 加密文件 BouncyCastle 库看起来是正确的使用方式 但我找不到 C 的文档 谁能帮我举个例子 谢谢 以下是 BouncyCastle 示例中的一些代
  • 创建不包含外部依赖项的 JAR 文件

    是否可以创建需要外部依赖项的 JAR 文件 而不在 JAR 文件中包含这些依赖项 我的 google fu 未能给我答案 我发现的所有内容都显示了如何将它们包含在 JAR 文件中 但没有显示如何将它们放入清单文件中来表示 我还没有得到它们
  • 如何清除内存以防止VBA中的“内存不足错误”?

    我正在一个大型 Excel 电子表格上运行 VBA 代码 如何清除过程 调用之间的内存以防止发生 内存不足 问题 帮助释放内存的最佳方法是使大对象无效 Sub Whatever Dim someLargeObject as SomeObje
  • C++ 内联类方法导致未定义的引用

    当我尝试内联某个类的方法时 出现编译器错误 当我去掉 inline 关键字时它就起作用了 这是一个简化的示例 主要 cpp include my class h int main MyClass c c TestMethod return
  • 单击时搜索栏的拇指

    我想在搜索栏拇指上注册一个可点击事件 以便在用户单击它时触发事件 是否可以 结合 zwebie 和 Nermeens 的答案得出正确的解决方案 seekbar setOnSeekBarChangeListener new SeekBar O
  • 更好的蜜罐实施(形成反垃圾邮件)

    How do we get rid of these spambots on our site 每个网站都会成为受害者spambots在某一点 您的处理方式会影响您的客户 并且大多数解决方案可能会阻止某些人填写您的表格 这就是蜜罐技术的用武
  • cdk virtualscroll 与 mat-grid-list

    是否有与网格列表一起使用的虚拟滚动实现 我认为默认实现不起作用 因为每一行周围都应该有一个元素 我使用网格列表来显示个人资料图片 并且需要无限滚动或最好是虚拟滚动来加载新图片 因此 由于 cdk virtualscroll 不支持多列 我最
  • PHP/MySQL 数据库查询到底是如何工作的?

    我经常使用MySQL 但我总是想知道它到底是如何工作的 当我得到肯定的结果时 数据到底存储在哪里 例如我这样写 sql SELECT FROM TABLE result mysql query sql while row mysql fet
  • C 在 Windows 上获取系统时间到微秒精度? [复制]

    这个问题在这里已经有答案了 可能的重复 在 C 中以微秒分辨率测量时间 Hi 有没有一种简单的方法可以获取 Windows 计算机上的系统时间 精确到微秒 查看 GetSystemTimeAsFileTime 它的精度为 0 1 微秒或 1
  • xsl:for-each 有什么不好的地方?

    我一次又一次听到有关如何避免使用 XSLT for each 的说法 应该消除的是你内心的命令式编程恶魔 这有什么不好呢 此最佳实践是否重要取决于sizeXML 的数量 即 100 个节点与 10 000 个节点 之间的本质区别
  • 在 mac os x 10.6.7 上卸载 python 3.2

    根据 python org 的文档 在 mac os 上安装 python 3 2 需要升级到 tcl tk 8 5 9 为了使用 IDLE 由于仓促 我两件事都做了 现在我的朋友告诉我 还不推荐使用 python 3 因为 3 只发布了内
  • 为什么 time.clock 给出的经过时间比 time.time 更长?

    我在 Ubuntu 上使用了一段 python 代码的计时time clock and time time clock elapsed time 8 770 s time elapsed time 1 869 s 我知道 time time