在t秒内统一运行x次

时间:2016-08-01 17:16:23

标签: python sockets time

我想在一段时间内多次重复一项任务,我想以统一的方式做到这一点,所以如果我想在1秒内完成任务4次,那么它应该在t = 0,0.25时执行, 0.5和0.75。

所以现在我在做:

import math
import socket

s = socket.socket(...) #not important 

time_step = 1./num_times_executed
for _ in num_times_executed:
    now = time.time()
    s.sendto(...) #action i do
    time.sleep(max(0,time_step-(time.time()-now)))

然而,有很多开销,循环越大我得到的漂移越多。例如,num_times_executed = 800,需要1.1秒,所以~10%错误...

有没有办法以良好的精度做到这一点?

1 个答案:

答案 0 :(得分:2)

time_step = 1./num_times_executed
start = time.time()
for i in num_times_executed:
    s.sendto(...) #action i do
    next_send_time = start + (i+1) * time_step
    time.sleep(max(0,next_send_time - time.time()))

现在你不会有任何漂移,因为时间步长是从开始时间确定的值。以前在设置now = time.time()之前发生的小计算会导致微小的漂移,但现在只要你的time_step足够长以执行s.sendto(...)命令,你就不应该有任何漂移