Maison  >  Article  >  développement back-end  >  Quelle est la précision de la fonction « time.sleep() » de Python et comment puis-je améliorer sa précision ?

Quelle est la précision de la fonction « time.sleep() » de Python et comment puis-je améliorer sa précision ?

DDD
DDDoriginal
2024-11-23 01:14:33359parcourir

How Accurate is Python's `time.sleep()` Function, and How Can I Improve Its Precision?

Mesurer la précision de la fonction time.sleep() de Python

La fonction time.sleep() de Python est un outil utile pour suspendre l'exécution d'un programme. Cependant, des questions se posent concernant sa précision, en particulier lors de l'utilisation de nombres à virgule flottante.

Précision de time.sleep()

La précision de time.sleep() dépend du système d'exploitation sous-jacent. (OS). Les systèmes d'exploitation en temps différé, tels que Windows, ont un intervalle de veille minimum d'environ 10 à 13 millisecondes.

Qu'est-ce que cela signifie ? Si vous essayez de dormir pendant 50 millisecondes (0,05 seconde), time.sleep() ne peut s'arrêter que pendant environ 50 millisecondes à partir de l'intervalle minimum (10-13 ms).

Boucle pour la précision

Pour améliorer la précision, il est recommandé d'implémenter une boucle autour de time.sleep(). Si la fonction se réveille avant l'heure prévue, elle se rendormira pour la durée restante.

Noyaux en temps réel

Si vous avez besoin d'intervalles de sommeil plus précis, pensez à utiliser un pseudo réel -time kernel, tel que le noyau rt d'Ubuntu (ensemble de correctifs RT_PREEMPT). Cela peut réduire l'intervalle de sommeil minimum à environ 1 milliseconde.

Autres considérations

Les noyaux Linux non temps réel ont un intervalle de sommeil minimum plus proche de 1 milliseconde, mais il peut varier en un temps non réel. -manière déterministe.

Exemple avec boucle pour la précision

Voici un exemple avec une boucle pour assurer précision :

import time

target_sleep_time = 0.05  # 50 milliseconds

start_time = time.time()
while True:
    elapsed_time = time.time() - start_time
    if elapsed_time >= target_sleep_time:
        break
    time.sleep(target_sleep_time - elapsed_time)

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn