python / python/cpython

unittest.mock.patch.object holds references for too long

Abierto
#133,423 10 comentarios 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

performance stdlib type-bug
Lenguaje dominante
Python
Estrellas
77.2k
Forks
36k
Métricas de merge de PR
Métricas de PR pendientes

Descripción

Bug report

Bug description:
import sys
from unittest import mock
import json

def main():
    obj = 'asdfa' * 2000

    print("BEGIN", sys.getrefcount(obj))
    for i in range(10):
        with mock.patch.object(json, 'dumps', return_value=3):
            from json import dumps
            dumps(obj)
    del dumps
    print("END", sys.getrefcount(obj))
    import gc; gc.collect()
    print("AFTERGC", sys.getrefcount(obj))


if __name__ == '__main__':
    main()

The code prints:

BEGIN 2
END 12
AFTERGC 2

Because it is the user's data that is leaked, the leaked object could be huge and could cause non-trivial problems.

CPython versions tested on:

3.13

Operating systems tested on:

Linux

Linked PRs
  • gh-139937

Guía de contribución

Abrir la guía de contribución

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Línea de trabajo

Comienza con unittest.mock.patch.object y la reproducción proporcionada; después, lee el PR vinculado gh-139937 para conocer la investigación actual. Verifica los recuentos de referencias antes y después de contextos de patch repetidos y de la recolección de basura; se considera terminado cuando el objeto del usuario ya no permanece referenciado después de que finalicen los contextos.

Escrito por el modelo de indexación a partir del texto del issue.

Evaluación

Stack tecnológico
python
Área
testing
Tipo de issue
Error
Dificultad
4/5
Tiempo estimado
3-5 días
Estado de actividad
Estancado
Claridad
Bastante claro
Aptitud para principiantes
25/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.