目标:我想看看python每1秒打印多少次。
出于教学目的,我正在尝试编写一个脚本,该脚本显示每秒一个随机模块在循环中出现的次数。如何以最快的蟒蛇方式做到这一点?
首先,为了计算秒数,我编写了以下代码:
import time
sec = 0
while True:
print(sec)
time.sleep(1)
sec += 1但是这个看起来比真正的秒还慢。
所以我决定使用本地秒。另外,在继续我的脚本之前,我想统计一下python会手动打印'you fool‘的次数,所以我写了以下代码:
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次,等等。为什么它变慢了?
我现在在哪里结束/卡住:
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"?这个脚本怎么写?
发布于 2018-01-24 09:22:05
数一秒不会给你一个好的结果。一秒钟内打印的数量可能会根据系统上当前运行的其他线程(对于操作系统或其他程序)而有所不同,并且可能会受到其他未知因素的影响。
考虑以下the代码:
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%)。
我们应该注意到,实际的打印数量还取决于我们不断测试当前时间和计算打印数量的事实,然而,尽管我没有在这里进行测试,但通常情况下,打印到屏幕所需的时间比这些操作要长得多。
https://stackoverflow.com/questions/48413230
复制相似问题