python profiler_Python profiler测量的CPU时间与用户和系统时间之间的关系是什么?

This answers关于实际、用户和系统计时含义的详细说明。引用:“Real”是指从通话开始到结束的挂钟时间。这个

所有已用时间,包括其他进程使用的时间片,以及

进程被阻塞所花费的时间(例如,如果它正在等待I/O

完成)。

“User”是在用户模式代码(在

内核)在进程中。这只是实际使用的CPU时间

执行流程。其他流程和流程花费的时间

阻塞不计入此数字。

“Sys”是进程内在内核中花费的CPU时间量。

这意味着在

内核,而不是仍在运行的库代码

用户空间。与“user”一样,这是进程使用的唯一CPU时间。

从上面的解释看来,User+Sys time应该等于CPU秒数。相反,它更接近“实时”。奇怪!在

对此有一个合理的解释。”用户时间不包括进程中I/O操作所花费的CPU秒数。它只是测量在内存中花在用户模式代码上的CPU时间。经验法则是:real time = user + sys + I/O time + interpreter startup time + bytecode compilation time

为了验证这一点,我做了一个urllib2.urlopen(urllib2.Request(url))调用,执行密集的I/O操作。结果如下:100792 function calls (98867 primitive calls) in 2.076 CPU seconds

Ordered by: internal time

ncalls tottime percall cumtime percall filename:lineno(function)

512 0.719 0.001 0.719 0.001 {method 'recv' of '_socket.socket' objects}

1 0.464 0.464 0.473 0.473 {_socket.getaddrinfo}

1 0.352 0.352 0.352 0.352 :1(connect)

1 0.248 0.248 0.348 0.348 common_functions.py:1()

1 0.022 0.022 0.075 0.075 __init__.py:2()

1 0.017 0.017 0.030 0.030 urllib.py:1442(getproxies_macosx_sysconf)

330/67 0.012 0.000 0.031 0.000 sre_parse.py:385(_parse)

real 0m2.255s

user 0m0.352s

sys 0m0.093s

在这里,2.076-(0.352+0.093),也就是说,在i/O操作中消耗了1.631CPU秒(主要是_socket.socket和{})。剩下的时间,2.255-2.076,都花在代码的冷启动上。在

希望这是有用的。在

更新:在多核系统中,多个CPU并行工作,情况略有不同。cProfile报告的总CPU秒数是所有CPU单独花费的时间总和。例如:在2核系统中,如果一个CPU工作10秒。同时,另一个CPU工作15秒。报告的CPU总秒数为25秒。虽然实际时间可能只有15秒。因此,在多核系统中,CPU时间可能比实时时间更多。当CPU并行工作时

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值