10 choses surprenantes que vous pouvez faire avec le module Time de Python

 10 choses surprenantes que vous pouvez faire avec le module Time de Python


10 choses surprenantes que vous pouvez faire avec le module Time de Python
Image de l’éditeur | Chatte

# Introduction

La plupart des développeurs Python connaissent le time module, pour ses fonctions pratiques telles que time.sleep(). Cela fait de la modification de l’exécution de la pause, un outil simple mais essentiel. Cependant, le time Le module est beaucoup plus polyvalent, offrant une suite de fonctions pour une mesure précise, une conversion temporelle et un formatage qui passent souvent inaperçus. L’exploration de ces capacités peut débloquer des moyens plus efficaces de gérer les tâches liées au temps dans vos projets de science des données et d’autres projets de codage.

J’ai eu un flack pour la dénomination des articles précédents « 10 choses surprenantes », et je comprends. « Oui, c’est tellement surprenant que je peux effectuer des tâches de date et d’heure avec le module DateTime, merci. » Critique valide. Cependant, le nom colle parce qu’il est accrocheur, alors traitez-le 🙂

Dans tous les cas, voici 10 choses surprenantes et utiles que vous pouvez faire avec Python time module.

# 1. Mesurer avec précision le temps de blocage mural écoulé avec time.monotonic()

Alors que vous pourriez aller automatiquement time.time() Pour mesurer la durée d’une fonction, elle a un défaut critique: il est basé sur le horloge systèmequi peut être modifié manuellement ou par des protocoles de temps de réseau. Cela peut conduire à des différences de temps inexactes ou même négatives. Une solution plus robuste est time.monotonic(). Cette fonction renvoie la valeur d’une horloge monotonique, qui ne peut pas reculer et n’est pas affectée par les mises à jour du temps du système. Cela en fait vraiment le choix idéal pour mesurer les durées de manière fiable.

import time

start_time = time.monotonic()

# Simulate a task
time.sleep(2)

end_time = time.monotonic()
duration = end_time - start_time

print(f"The task took {duration:.2f} seconds.")

Sortir:

The task took 2.01 seconds.

# 2. Mesurer le temps de traitement du processeur avec time.process_time()

Parfois, vous ne vous souciez pas du temps total passé (temps mural). Au lieu de cela, vous voudrez peut-être savoir combien de temps le processeur a réellement passé à exécuter votre code. Ceci est crucial pour l’efficacité des algorithmes d’analyse comparative, car il ignore le temps passé à dormir ou à attendre les opérations d’E / S. Le time.process_time() La fonction renvoie la somme du temps du système et du processeur utilisateur du processus actuel, fournissant une pure mesure de l’effort de calcul.

import time

start_cpu = time.process_time()

# A CPU-intensive task
total = 0
for i in range(10_000_000):
    total += i

end_cpu = time.process_time()
cpu_duration = end_cpu - start_cpu

print(f"The CPU-intensive task took {cpu_duration:.2f} CPU seconds.")

Sortir:

The CPU-intensive task took 0.44 CPU seconds.

# 3. Obtenez des horodatages de haute précision avec time.perf_counter()

Pour un timing très précis, en particulier pour les durées très courtes, time.perf_counter() est un outil essentiel. Il renvoie la valeur d’un compteur de performances haute résolution, qui est l’horloge la plus précise disponible sur votre système. Il s’agit d’un nombre à l’échelle du système, y compris le temps écoulé pendant le sommeil, ce qui le rend parfait pour les scénarios de référence où chaque nanoseconde compte.

import time

start_perf = time.perf_counter()

# A very short operation
_ = (x*x for x in range(1000))

end_perf = time.perf_counter()
perf_duration = end_perf - start_perf

print(f"The short operation took {perf_duration:.6f} seconds.")

Sortir:

The short operation took 0.000028 seconds.

# 4. Convertir les horodatages en chaînes lisibles avec time.ctime()

La sortie de time.time() est un flotteur représentant quelques secondes depuis «l’époque» (1er janvier 1970 pour les systèmes UNIX). Bien que utile pour les calculs, il n’est pas lisible par l’homme. Le time.ctime() La fonction prend cet horodatage et la convertit en un format de chaîne standard et facile à lire, comme «Thu 31 juil 16:32:30 2025».

import time

current_timestamp = time.time()
readable_time = time.ctime(current_timestamp)

print(f"Timestamp: {current_timestamp}")
print(f"Readable Time: {readable_time}")

Sortir:

Timestamp: 1754044568.821037
Readable Time: Fri Aug  1 06:36:08 2025

# 5. Temps d’analyse d’une chaîne avec time.strptime()

Disons que vous avez des informations de temps stockées en tant que chaîne et que vous devez la convertir en un objet temporel structuré pour un traitement ultérieur. time.strptime() (Temps d’analyse des chaînes) est votre fonction. Vous fournissez la chaîne et un code de format qui spécifie comment les composants de la date et de l’heure sont organisés. Il renvoie un struct_time Objet, qui est un tuple contenant des éléments – comme l’année, le mois, le jour, etc. – qui peut ensuite être extrait.

import time

date_string = "31 July, 2025"
format_code = "%d %B, %Y"

time_struct = time.strptime(date_string, format_code)

print(f"Parsed time structure: {time_struct}")
print(f"Year: {time_struct.tm_year}, Month: {time_struct.tm_mon}")

Sortir:

Parsed time structure: time.struct_time(tm_year=2025, tm_mon=7, tm_mday=31, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=212, tm_isdst=-1)
Year: 2025, Month: 7

# 6. Format du temps en chaînes personnalisées avec time.strftime()

L’opposé de l’analyse est le formatage. time.strftime() (temps de format de chaîne) prend un struct_time objet (comme celui renvoyé par strptime ou localtime) et le formate en une chaîne en fonction de vos codes de format spécifié. Cela vous donne un contrôle total sur la sortie, que vous préfériez « 2025-07-31 » ou « jeudi 31 juillet ».

import time

# Get current time as a struct_time object
current_time_struct = time.localtime()

# Format it in a custom way
formatted_string = time.strftime("%Y-%m-%d %H:%M:%S", current_time_struct)
print(f"Custom formatted time: {formatted_string}")

day_of_week = time.strftime("%A", current_time_struct)
print(f"Today is {day_of_week}.")

Sortir:

Custom formatted time: 2025-08-01 06:41:33
Today is Friday

# 7. Obtenez des informations de base de fuseau horaire avec time.timezone et time.tzname

Pendant que le DateTime module (et bibliothèques comme pytz) sont meilleurs pour la manipulation complexe du fuseau horaire, le time Le module offre des informations de base. time.timezone Fournit le décalage du fuseau horaire local non-DST (temps d’été) en quelques secondes à l’ouest de l’UTC, tandis que time.tzname est un tuple contenant les noms des fuseaux horaires non DST et DST locaux.

import time

# Offset in seconds west of UTC
offset_seconds = time.timezone

# Timezone names (standard, daylight saving)
tz_names = time.tzname

print(f"Timezone offset: {offset_seconds / 3600} hours west of UTC")
print(f"Timezone names: {tz_names}")

Sortir:

Timezone offset: 5.0 hours west of UTC
Timezone names: ('EST', 'EDT')

# 8. Convertir entre UTC et l’heure locale avec time.gmtime() et time.localtime()

Travailler avec différents fuseaux horaires peut être délicat. Une pratique courante consiste à stocker toutes les données de toutes les temps en temps universel coordonné (UTC) et à le convertir en temps local uniquement pour l’affichage. Le time Le module facilite cela avec time.gmtime() et time.localtime(). Ces fonctions prennent un horodatage en secondes et renvoient un struct_time objet – gmtime() le retourne dans UTC, tandis que localtime() Le renvoie pour le fuseau horaire configuré de votre système.

import time

timestamp = time.time()

# Convert timestamp to struct_time in UTC
utc_time = time.gmtime(timestamp)

# Convert timestamp to struct_time in local time
local_time = time.localtime(timestamp)

print(f"UTC Time: {time.strftime('%Y-%m-%d %H:%M:%S', utc_time)}")
print(f"Local Time: {time.strftime('%Y-%m-%d %H:%M:%S', local_time)}")

Sortir:

UTC Time: 2025-08-01 10:47:58
Local Time: 2025-08-01 06:47:58

# 9. effectuer l’inverse de time.time() avec time.mktime()

time.localtime() convertit un horodat en un struct_time Objet, qui est utile … mais comment allez-vous dans le sens inverse? Le time.mktime() La fonction fait exactement cela. Il faut un struct_time Object (représentant le temps local) et le transforme en un nombre à virgule flottante représentant des secondes depuis l’époque. Ceci est alors utile pour calculer les horodatages futurs ou passés ou la réalisation de la date arithmétique.

import time

# Get current local time structure
now_struct = time.localtime()

# Create a modified time structure for one hour from now
future_struct_list = list(now_struct)
future_struct_list(3) += 1 # Add 1 to the hour (tm_hour)
future_struct = time.struct_time(future_struct_list)

# Convert back to a timestamp
future_timestamp = time.mktime(future_struct)

print(f"Current timestamp: {time.time():.0f}")
print(f"Timestamp in one hour: {future_timestamp:.0f}")

Sortir:

Current timestamp: 1754045415
Timestamp in one hour: 1754049015

# 10. Obtenez le temps de processeur spécifique au fil avec time.thread_time()

Dans des applications multipliques, time.process_time() Vous donne le temps total du processeur pour l’ensemble du processus. Mais que se passe-t-il si vous souhaitez profiler l’utilisation du processeur d’un fil spécifique? Dans ce cas, time.thread_time() est la fonction que vous recherchez. Cette fonction renvoie la somme du temps du système et du processeur utilisateur pour le thread actuelvous permettant d’identifier quels threads sont les plus chers par calcul.

import time
import threading

def worker_task():
    start_thread_time = time.thread_time()

    # Simulate work
    _ = (i * i for i in range(10_000_000))

    end_thread_time = time.thread_time()

    print(f"Worker thread CPU time: {end_thread_time - start_thread_time:.2f}s")

# Run the task in a separate thread
thread = threading.Thread(target=worker_task)
thread.start()
thread.join()

print(f"Total process CPU time: {time.process_time():.2f}s")

Sortir:

Worker thread CPU time: 0.23s
Total process CPU time: 0.32s

# Emballage

Le time Le module est un segment intégral et puissant de la bibliothèque standard de Python. Alors que time.sleep() est sans aucun doute sa fonction la plus célèbre, ses capacités de synchronisation, de mesure de durée et de mise en forme du temps en font un outil pratique pour toutes sortes de tâches pratiquement utiles.

En allant au-delà des bases, vous pouvez apprendre de nouvelles astuces pour écrire un code plus précis et plus efficace. Pour une manipulation de date et d’heure plus avancée et orientée objet, assurez-vous de vérifier Des choses surprenantes que vous pouvez faire avec le datetime module suivant.

Matthew Mayo (@ Mattmayo13) est titulaire d’une maîtrise en informatique et d’un diplôme d’études supérieures en exploration de données. En tant que rédacteur en chef de Kdnuggets & Statologieet rédacteur en chef à Maîtrise de l’apprentissage automatiqueMatthew vise à rendre les concepts de science des données complexes accessibles. Ses intérêts professionnels incluent le traitement du langage naturel, les modèles de langue, les algorithmes d’apprentissage automatique et l’exploration de l’IA émergente. Il est motivé par une mission pour démocratiser les connaissances dans la communauté des sciences des données. Matthew est codant depuis l’âge de 6 ans.





Source link

Related post