我有一个我想打电话的功能,比方说,每秒10次。我从这样的代码开始:
while True:
the_operation()
time.sleep(1.0/TIMES_PER_SECOND)
这样做没问题,但是__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有什么好的模式?