【发布时间】:2017-09-21 19:40:47
【问题描述】:
我有一个函数,我想每秒调用 10 次。我从这样的代码开始:
while True:
the_operation()
time.sleep(1.0/TIMES_PER_SECOND)
这工作正常,但调用 the_operation 的频率略低于预期,因为执行操作本身需要时间。我们可以让代码看起来像这样:
while True:
t = time.time()
the_operation()
time_to_sleep = 1.0/TIMES_PER_SECOND - (time.time() - t)
if time_to_sleep > 0:
time.sleep(time_to_sleep)
这更好,但仍然不够好——不考虑执行循环的时间,如果在一次迭代中,_操作恰好比 1/TIMES_PER_SECOND 长得多,我们的吞吐量将太低。该操作平均耗时不到 1/TIMES_PER_SECOND,但代码需要处理确实耗时较长的情况。
平均以指定速率调用 the_operation 的良好模式是什么?
【问题讨论】: