我一直对此很好奇,因为简单的方法绝对没有效率。如何有效地每x秒输出一个值?你知道吗
下面是我的意思的一个例子:
import time
num = 50000000
startTime = time.time()
j=0
for i in range(num):
j = (((j+10)**0.5)**2)**0.5
print time.time() - startTime
#output time: 24 seconds
startTime = time.time()
newTime = time.time()
j=0
for i in range(num):
j = (((j+10)**0.5)**2)**0.5
if time.time() - newTime > 0.5:
newTime = time.time()
print i
print time.time() - startTime
#output time: 32 seconds
如果不每半秒输出一次进度,速度会快1/3。你知道吗
我知道这是因为每个循环都需要额外的计算,但这同样适用于您可能希望执行的其他类似检查—您将如何在不严重影响执行时间的情况下执行类似的操作?你知道吗
我试过用边带线来打印。它在Python2.x上增加了5秒的执行时间,但实际上在Python3.x上没有额外的时间。Python2.x线程有很多开销。下面是我的例子,时间安排作为注释:
通过跟踪下一次打印的到期时间,可以节省一些时钟周期
然后你的情况将是一个简单的比较
而不是先减法再比较
你只需要在每条信息之后做加法,而不是在每条信息之后做减法
好吧,你知道你每秒钟要做很多次迭代,所以你真的不需要每次迭代都进行
time.time()
调用。您可以使用模运算符来实际检查是否需要在循环的每N次迭代中输出一些内容。你知道吗每50次迭代检查一次,我的运行时间就从56秒减少到了43秒(原来的运行时间是42秒,而Tom Page的解决方案是50秒),迭代完成得足够快,根据
time.time()
,它仍然精确地每0.5秒输出一次:相关问题 更多 >
编程相关推荐