J'ai une fonction que je veux appeler, disons, 10 fois par seconde. Je commence avec le code comme ceci:Comment effectuer une opération qui prend un certain temps tout en maintenant un débit moyen donné
while True:
the_operation()
time.sleep(1.0/TIMES_PER_SECOND)
Cela fonctionne bien, mais the_operation est appelé un peu moins souvent que souhaité, en raison du temps de faire l'opération elle-même. Nous pouvons faire le look de code comme ceci:
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)
C'est mieux, mais pas encore assez bon - le temps d'exécuter la boucle est pas considéré, et si the_operation arrive à prendre beaucoup plus longtemps que 1/TIMES_PER_SECOND en une seule itération, notre débit sera trop faible. L'opération prend en moyenne moins de 1/TIMES_PER_SECOND, mais le code doit gérer les cas où cela prend plus de temps.
Quel est un bon motif pour appeler the_operation au taux spécifié en moyenne?