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
Barbara Streisandoriginal
2024-12-06 06:28:10991parcourir

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)

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)

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()

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