在该代码部分,我试图收集100个数据(在for循环中),我想如果for循环执行持续不到1秒,等待(1执行时间)秒。我怎样才能做到这一点 ?
感谢
while(1):
temparray=array('i')
fileName = 'interval' + str(initialfreq) + '.txt'
temp_file = open(fileName, 'wb')
for z in range(100):
readoff = ser.readline()
temp_file.write(readoff)
readoff=int(readoff)
temparray.append(readoff)
print('biten aralik: '+str(initialfreq))
general_list.write('interval'+str(initialfreq)+": "+str(mean(temparray))+'\n')
initialfreq= initialfreq + 1
答案 0 :(得分:0)
在for
循环之前,获取当前时间t0
。
在for
循环后,再次获取当前时间,t1
。
然后,如果t1 - t0 < 1
,time.sleep(1 - (t1 - t0))
。
您可以使用几种不同的时间对象选择。 datetime.datetime
是最简单的(特别是如果您需要稍后调试此版本的datetime
,并且它可以立即读取给人类),如果您不需要最高精度。当您减去两个datetime
个对象时,会得到一个timedelta
个对象。所以:
t0 = datetime.datetime.now()
for …
t1 = datetime.datetime.now()
td = (t1 - t0).total_seconds()
if td < 1:
time.sleep(1 - td)
如果您需要更高的精度,time
模块中的功能可让您使用平台支持的更好的时钟,尤其是当您使用3.3+时。请参阅3.3 +中的clock_gettime
函数:
t0 = time.clock_gettime(time.CLOCK_MONOTONIC)
for …
t1 = time.clock_gettime(time.CLOCK_MONOTONIC)
td = (t1 - t0) / time.clock_getres(time.CLOCK_MONOTONIC)
# same code as above
CLOCK_MONOTONIC
可能不是您平台的最佳时钟 - 例如,如果您有CLOCK_HIGHRES
或CLOCK_MONOTONIC_RAW
,它们几乎总会更好。所以,阅读文档,然后检查你有什么。
在早期版本(包括所有2.x版本)中,您必须在clock
,perf_counter
,process_time
或time
之间进行选择,这些版本都有所不同权衡,在不同平台上的权衡甚至是不同的(datetime.datetime
已经至少和time
一样好了,所以没有人能告诉你“总是使用这个”。
答案 1 :(得分:0)
import time
now = time.time()
future = now + 1
for z in range(100):
readoff = ser.readline()
temp_file.write(readoff)
readoff=int(readoff)
temparray.append(readoff)
time_span = future - time.time()
if time_span > 0:
print 'sleeping for %g' %(1-time_span)
time.sleep(1-time_span)