将 python 内置分析器与在一个处理器中运行的脚本一起使用(没有多线程)
time python -m cProfile myscript.py
分析器报告的 CPU 时间为 345.710 CPU 秒
24184348 function calls (24183732 primitive calls) in 345.710 CPU seconds
真实、用户和系统时间是:
real 5m45.926s
user 1m59.340s
sys 0m39.452s
如您所见,CPU 时间几乎是实时时间 (345.710 = 5m45.710s)。
那么,鉴于该结果,是否可以假设分析器报告的 CPU 时间包括其他进程使用的时间片和进程阻塞的时间?也就是说,探查器 CPU 时间不是进程时间(用户 + 系统),而是挂钟时间,如中所述 What do 'real', 'user' and 'sys' mean in the output of time(1)?
非常感谢
最佳答案
This answers详细介绍了真实、用户和系统计时的含义。引用:
“真实”是挂钟时间 - 从通话开始到结束的时间。这个 是所有耗时,包括其他进程使用的时间片,并且 进程阻塞的时间(例如,如果它正在等待 I/O 完成)。
'User' 是在用户模式代码中花费的 CPU 时间量(在 内核)在进程中。这只是实际使用的 CPU 时间 执行过程。其他进程和进程花费的时间 被阻止不计入此数字。
'Sys' 是进程内在内核中花费的 CPU 时间量。 这意味着在系统调用中执行 CPU 时间 内核,而不是仍在运行的库代码 用户空间。与“用户”一样,这只是进程使用的 CPU 时间。
从上面的解释看来,User+Sys 时间应该等于 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 <string>:1(connect)
1 0.248 0.248 0.348 0.348 common_functions.py:1(<module>)
1 0.022 0.022 0.075 0.075 __init__.py:2(<module>)
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),即 1.631 CPU 秒被消耗在 I/O 操作上(主要是 _socket.socket 和 _socket.getaddrinfo)。剩下的时间,2.255-2.076,都花在了代码的冷启动上。
希望有用。
更新:在多核系统中,多个CPU并行工作,情况略有不同。 cProfile 报告的总 CPU 秒数是所有 CPU 单独花费的时间总和。例如:在 2 核系统中,如果一个 CPU 工作 10 秒。并行地,另一个 CPU 工作 15 秒。报告的总 CPU 秒数将为 25 秒。尽管实际流逝的时间可能只有 15 秒。因此,在多核系统中,CPU 时间可能比实时多。因为 CPU 正在并行工作
关于python - Python 分析器测量的 CPU 时间与实际用户和系统时间之间的关系是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9533179/
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。
我构建了两个需要相互通信和发送文件的Rails应用程序。例如,一个Rails应用程序会发送请求以查看其他应用程序数据库中的表。然后另一个应用程序将呈现该表的json并将其发回。我还希望一个应用程序将存储在其公共(public)目录中的文本文件发送到另一个应用程序的公共(public)目录。我从来没有做过这样的事情,所以我什至不知道从哪里开始。任何帮助,将不胜感激。谢谢! 最佳答案 无论Rails是什么,几乎所有Web应用程序都有您的要求,大多数现代Web应用程序都需要相互通信。但是有一个小小的理解需要你坚持下去,网站不应直接访问彼此
我需要检查DateTime是否采用有效的ISO8601格式。喜欢:#iso8601?我检查了ruby是否有特定方法,但没有找到。目前我正在使用date.iso8601==date来检查这个。有什么好的方法吗?编辑解释我的环境,并改变问题的范围。因此,我的项目将使用jsapiFullCalendar,这就是我需要iso8601字符串格式的原因。我想知道更好或正确的方法是什么,以正确的格式将日期保存在数据库中,或者让ActiveRecord完成它们的工作并在我需要时间信息时对其进行操作。 最佳答案 我不太明白你的问题。我假设您想检查
在Cooper的书BeginningRuby中,第166页有一个我无法重现的示例。classSongincludeComparableattr_accessor:lengthdef(other)@lengthother.lengthenddefinitialize(song_name,length)@song_name=song_name@length=lengthendenda=Song.new('Rockaroundtheclock',143)b=Song.new('BohemianRhapsody',544)c=Song.new('MinuteWaltz',60)a.betwee
这个问题在这里已经有了答案:Railsformattingdate(4个答案)关闭4年前。我想格式化Time.Now函数以显示YYYY-MM-DDHH:MM:SS而不是:“2018-03-0909:47:19+0000”该函数需要放在时间中.现在功能。require‘roo’require‘roo-xls’require‘byebug’file_name=ARGV.first||“Template.xlsx”excel_file=Roo::Spreadsheet.open(“./#{file_name}“,extension::xlsx)xml=Nokogiri::XML::Build
我正在检查一个Rails项目。在ERubyHTML模板页面上,我看到了这样几行:我不明白为什么不这样写:在这种情况下,||=和ifnil?有什么区别? 最佳答案 在这种特殊情况下没有区别,但可能是出于习惯。每当我看到nil?被使用时,它几乎总是使用不当。在Ruby中,很少有东西在逻辑上是假的,只有文字false和nil是。这意味着像if(!x.nil?)这样的代码几乎总是更好地表示为if(x)除非期望x可能是文字false。我会将其切换为||=false,因为它具有相同的结果,但这在很大程度上取决于偏好。唯一的缺点是赋值会在每次运行
我正在尝试解析一个CSV文件并使用SQL命令自动为其创建一个表。CSV中的第一行给出了列标题。但我需要推断每个列的类型。Ruby中是否有任何函数可以找到每个字段中内容的类型。例如,CSV行:"12012","Test","1233.22","12:21:22","10/10/2009"应该产生像这样的类型['integer','string','float','time','date']谢谢! 最佳答案 require'time'defto_something(str)if(num=Integer(str)rescueFloat(s
我的问题的一个例子是体育游戏。一场体育比赛有两支球队,一支主队和一支客队。我的事件记录模型如下:classTeam"Team"has_one:away_team,:class_name=>"Team"end我希望能够通过游戏访问一个团队,例如:Game.find(1).home_team但我收到一个单元化常量错误:Game::team。谁能告诉我我做错了什么?谢谢, 最佳答案 如果Gamehas_one:team那么Rails假设您的teams表有一个game_id列。不过,您想要的是games表有一个team_id列,在这种情况下
这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Pythonconditionalassignmentoperator对于这样一个简单的问题表示歉意,但是谷歌搜索||=并不是很有帮助;)Python中是否有与Ruby和Perl中的||=语句等效的语句?例如:foo="hey"foo||="what"#assignfooifit'sundefined#fooisstill"hey"bar||="yeah"#baris"yeah"另外,类似这样的东西的通用术语是什么?条件分配是我的第一个猜测,但Wikipediapage跟我想的不太一样。
什么是ruby的rack或python的Java的wsgi?还有一个路由库。 最佳答案 来自Python标准PEP333:Bycontrast,althoughJavahasjustasmanywebapplicationframeworksavailable,Java's"servlet"APImakesitpossibleforapplicationswrittenwithanyJavawebapplicationframeworktoruninanywebserverthatsupportstheservletAPI.ht