而循环性能取决于单独的过程

问题描述 投票:9回答:4

我已经注意到某些奇怪的行为,它可能会或可能不会特定于我的系统。 (联想t430运行Windows 8)

使用此脚本:

import time

now = time.time()
while True:
    then = now
    now = time.time()
    dif = now - then
    print(dif)
    time.sleep(0.01)

打开浏览器后,我得到以下输出(我认为是名义上的)。

enter image description here

但是,如果没有打开浏览器,我会发现每个循环的等待时间很长。

enter image description here

显然这是违反直觉的,因为我认为当您的并发过程较少时,任何人都希望性能更好。

对这些结果的任何见解或简单复制,将不胜感激。

编辑:有趣的是,我在这段代码中观察到了类似的延迟:

import time

now = time.time()

def newSleep(mark,duration):
    count = 0
    while time.time()-mark < duration:
        count+=1
    print(count)


while True:
    then = now
    now = time.time()
    dif = now - then
    print(dif)
    #time.sleep(0.01)
    newSleep(now,0.01)

虽然它确实提供了更多的见解-这是潜在循环的某些情况是由于缺乏处理器可用性(通过打印计数0引起的)-我仍然注意到15ms的行为,其中打印计数将高达70k ...以及10ms的行为,计数约为40k。

python python-3.x while-loop windows-8 lag
4个回答
4
投票

我在Windows和ubuntu server(virtualbox)(没有浏览器)中都尝试过相同的方法,但是结果是相同的,平均而言,我得到的结果是这样的>]

在Ubuntu服务器中

    0.010122537612915039
    0.010426998138427734
    0.010067939758300781
    0.010767221450805664
    0.010728120803833008
    0.010106086730957031
    0.01068258285522461
    0.010105609893798828
    0.01118612289428711
    0.010136842727661133
    0.010585784912109375
    0.010425567626953125
    0.01014852523803711
    0.010422945022583008
    0.01010894775390625

和在Windows中

    0.010767221450805664
    0.010751485824584961
    0.010716915130615234
    0.010229110717773438
    0.01016545295715332
    0.010195255279541016
    0.010723352432250977
    0.010744094848632812
    0.010716438293457031
    0.010564565658569336
    0.010889291763305664
    0.010728597640991211
    0.010579824447631836
    0.010889530181884766
    0.010567903518676758
    0.010717153549194336
    0.010735273361206055

所以,我认为打开的浏览器与python的性能之间没有关联


2
投票

对这些结果的任何见解或简单复制,将不胜感激。


2
投票

虽然我无法在计算机上重现此行为,但我怀疑它可能是由动态处理器时钟(以及内存和系统总线时钟)引起的,例如当您没有打开浏览器时,处理器以最大时钟的1/2运行,但是一旦启动浏览器,它将达到最大时钟。您可以通过在Advanced Power Options(高级电源选项)中使用“ Maximum \ minimum Processor state / frequency(最大处理器状态\频率)”或运行另一个会产生许多进程的应用程序(这是Chrome所做的)而不是浏览器来运行,并查看此操作是否改变了延迟,来验证这一点。


2
投票

我额外启动Windows 7以复制您的发现,我可以确认。

© www.soinside.com 2019 - 2024. All rights reserved.