python执行时间和延迟

时间:2013-12-19 19:55:42

标签: python time synchronization delay

在该代码部分,我试图收集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

2 个答案:

答案 0 :(得分:0)

for循环之前,获取当前时间t0

for循环后,再次获取当前时间,t1

然后,如果t1 - t0 < 1time.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_HIGHRESCLOCK_MONOTONIC_RAW,它们几乎总会更好。所以,阅读文档,然后检查你有什么。

在早期版本(包括所有2.x版本)中,您必须在clockperf_counterprocess_timetime之间进行选择,这些版本都有所不同权衡,在不同平台上的权衡甚至是不同的(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)