首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何正确计算“每秒次数”?

如何正确计算“每秒次数”?
EN

Stack Overflow用户
提问于 2018-01-24 08:52:07
回答 1查看 1.6K关注 0票数 2

目标:我想看看python每1秒打印多少次。

出于教学目的,我正在尝试编写一个脚本,该脚本显示每秒一个随机模块在循环中出现的次数。如何以最快的蟒蛇方式做到这一点?

首先,为了计算秒数,我编写了以下代码:

代码语言:javascript
复制
import time

sec = 0

while True:
    print(sec)
    time.sleep(1)
    sec += 1

但是这个看起来比真正的秒还慢。

所以我决定使用本地秒。另外,在继续我的脚本之前,我想统计一下python会手动打印'you fool‘的次数,所以我写了以下代码:

代码语言:javascript
复制
import time   

def LocalSeconds():
    local_seconds = time.gmtime()[5:-3]
    local_seconds = int(local_seconds[0])
    return local_seconds


while True:
    print(LocalSeconds(), 'you fool')

输出:第一秒-每秒14次;下一秒- 13次;下一秒- 12次,等等。为什么它变慢了?

我现在在哪里结束/卡住:

代码语言:javascript
复制
import time, random


def RandomNumbers():
    return random.randint(3,100)


def LocalSeconds():
    local_seconds = time.gmtime()[5:-3]
    local_seconds = int(local_seconds[0])
    return local_seconds


def LocalSecondsWithPing():
    local_seconds_ping = time.gmtime()[5:-3]
    local_seconds_ping = int(local_seconds[0:1])
    return local_seconds_ping



record_seconds = []
record_seconds_with_ping = []



while True:
    record_seconds.append(LocalSeconds())
    record_seconds_with_ping.append(LocalSecondsWithPing())

    if record_seconds == record_seconds_with_ping:
        RandomNumbers()
        del record_seconds_with_ping[0]

    del record_seconds[-1]

另外,我想我需要使用"for“循环,而不是"while"?这个脚本怎么写?

EN

回答 1

Stack Overflow用户

发布于 2018-01-24 09:22:05

数一秒不会给你一个好的结果。一秒钟内打印的数量可能会根据系统上当前运行的其他线程(对于操作系统或其他程序)而有所不同,并且可能会受到其他未知因素的影响。

考虑以下the代码:

代码语言:javascript
复制
import calendar
import time


NumOfSeconds=100                              #Number of seconds we average over
msg='Display this message'                    #Message to be displayed
count=0                                       #Number of time message will end up being displayed
#Time since the epoch in seconds + time of seconds in which we count
EndTime=calendar.timegm(time.gmtime()) + NumOfSeconds  

while calendar.timegm(time.gmtime())<EndTime: #While we are not at the end point yet
    print(msg)                                #Print message
    count=count+1                             #Count message printed

print(float(count)/NumOfSeconds)              #Average number of prints per second

这里calendar.timegm(time.gmtime())给出了自纪元以来的时间(如果您不知道这是什么,请阅读this )。但基本上,它只是一个固定的时间点,现在大多数计算机系统都将其用作参考点。因此,我们将EndTime设置为该点+我们想要平均的秒数。然后,在一个循环中,我们打印我们想要测试的消息,并计算我们这样做的次数,在每次迭代之间检查我们没有超过结束时间。最后,我们打印消息的平均每秒打印次数。这有助于这样一个事实,即我们可能会在从纪元开始的将近一秒的时候开始计数,在这种情况下,我们实际上将没有一整秒的时间来打印消息,而只是其中的一小部分。如果我们确保NumOfSeconds足够大,则误差增加将很小(例如,对于NumOfSeconds=100,误差约为1%)。

我们应该注意到,实际的打印数量还取决于我们不断测试当前时间和计算打印数量的事实,然而,尽管我没有在这里进行测试,但通常情况下,打印到屏幕所需的时间比这些操作要长得多。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48413230

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档