concurrent.futures.ThreadPoolExecutor does not free memory when shutdown
Nadie ha tomado este issue todavía.
- Lenguaje dominante
- Python
- Estrellas
- 77.2k
- Forks
- 36k
- Métricas de merge de PR
- Métricas de PR pendientes
Descripción
Bug report
Memory allocated in threads is never freed when using a ThreadPoolExecutor. The expected behavior is that when the executor is shut down, all memory allocated in its threads should be freed. The below code demonstrates this leak in that the the memory usage before allocating memory in threads is significantly less than after.
from concurrent.futures import ThreadPoolExecutor, as_completed
import resource
def process_user(x):
return bytearray(10000000)
print('Before', resource.getrusage(resource.RUSAGE_SELF).ru_maxrss/1024, 'MB')
def leak_memory():
with ThreadPoolExecutor(max_workers=20) as executor:
futures = [executor.submit(process_user, i) for i in range(100)]
for future in as_completed(futures):
cur = resource.getrusage(resource.RUSAGE_SELF).ru_maxrss/1024
print('Step', cur)
leak_memory()
print('After', resource.getrusage(resource.RUSAGE_SELF).ru_maxrss/1024, 'MB')
Your environment
Python 3.9.x/3.10.x. Mac os and debian.
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Línea de trabajo
Reproduzca el ejemplo en Python 3.9 o 3.10 en macOS o Debian, centrándose en el cierre de concurrent.futures.ThreadPoolExecutor y en la medición de resource.RUSAGE_SELF ru_maxrss. Determine si el valor indicado debería disminuir después del cierre; a continuación, identifique la implementación o las pruebas pertinentes y defina el comportamiento esperado de la memoria después del cierre.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- python
- Área
- backend
- Tipo de issue
- Error
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Estado de actividad
- Estancado
- Claridad
- Bastante claro
- Aptitud para principiantes
- 35/100