Maison > développement back-end > Tutoriel Python > Comment puis-je profiler et surveiller efficacement l'utilisation de la mémoire en Python ?

Comment puis-je profiler et surveiller efficacement l'utilisation de la mémoire en Python ?

Barbara Streisand
Libérer: 2024-12-06 06:28:10
original
1081 Les gens l'ont consulté

How Can I Effectively Profile and Monitor Memory Usage in Python?

Comment puis-je analyser l'utilisation de la mémoire en Python ?

Profilage de l'utilisation de la mémoire en Python

Python 3.4 a introduit le module tracemalloc pour une analyse approfondie de l'allocation de mémoire. Pour afficher les statistiques d'allocation de mémoire pour une fonction spécifique :

from tracemalloc import start, take_snapshot, display_top

start()

# Code to profile memory usage

snapshot = take_snapshot()
display_top(snapshot)
Copier après la connexion

Surveillance de la mémoire au fil du temps

Pour suivre l'utilisation de la mémoire sur une période prolongée :

from collections import Counter
import time

def count_prefixes():
    counts = Counter()
    with open('/usr/share/dict/american-english') as words:
        words = list(words)
        for word in words:
            counts[word[:3]] += 1
            time.sleep(0.0001)
    return counts.most_common(3)

count_prefixes()
snapshot = take_snapshot()
display_top(snapshot)
Copier après la connexion

Utilisation d'un thread séparé pour la surveillance

Pour surveiller l'utilisation de la mémoire à partir d'un thread distinct pendant que le le fil principal s'exécute :

from queue import Queue
from threading import Thread

def memory_monitor(queue):
    while True:
        try:
            command = queue.get(timeout=0.1)
            if command == 'stop':
                return
            snapshot = take_snapshot()
            print(datetime.now(), 'max RSS', getrusage(RUSAGE_SELF).ru_maxrss)
        except Empty:
            continue

queue = Queue()
monitor_thread = Thread(target=memory_monitor, args=(queue,))
monitor_thread.start()

try:
    count_prefixes()
finally:
    queue.put('stop')
    monitor_thread.join()
Copier après la connexion

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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal