Vous ne pouvez pas voir à partir de l'exception MemoryError
, et l'exception est soulevée pour n'importe quelle situation où l'allocation de mémoire a échoué, y compris les éléments internes de Python qui ne se connectent pas directement au code créant de nouvelles structures de données Python; certains modules créent des verrous ou d'autres objets de support et ces opérations peuvent échouer en raison de l'épuisement de la mémoire.
Vous ne pouvez pas non plus savoir exactement combien de mémoire serait nécessaire pour que l'opération réussisse. Si la bibliothèque crée plusieurs structures de données au cours de l'opération, essayer d'allouer de la mémoire pour une chaîne utilisée comme clé de dictionnaire pourrait être la goutte d'eau qui fait déborder le vase, ou cela pourrait être la copie de toute la structure de données existante pour mutation, ou autre chose, mais cela ne dit rien sur la quantité de mémoire qui sera nécessaire pour le reste du processus.
Cela étant dit, Python peut vous donner des informations détaillées sur les allocations de mémoire effectuées, et quand, et où, en utilisant le module tracemalloc
. En utilisant ce module et une approche expérimentale, vous pourriez estimer combien de mémoire votre jeu de données nécessiterait pour être complet.
Le truc consiste à trouver des ensembles de données pour lesquels le processus peut être terminé. Vous voudriez trouver des ensembles de données de différentes tailles, et vous pourriez alors mesurer combien de mémoire ces structures de données nécessitent. Vous créer des instantanés avant et après avec tracemalloc.take_snapshot()
, comparer les différences et les statistiques entre les instantanés pour ces ensembles de données, et peut-être pourriez-vous extrapoler à partir de ces informations combien de mémoire supplémentaire votre jeu de données plus grand aurait besoin. Cela dépend, bien sûr, de la nature de l'opération et des ensembles de données, mais s'il y a un type de modèle quelconque, tracemalloc
est votre meilleur moyen pour le découvrir.