python / python/cpython

concurrent.futures.ThreadPoolExecutor does not free memory when shutdown

Offen
#98,467 6 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

stdlib type-bug
Vorherrschende Sprache
Python
Sterne
77.2k
Forks
36k
PR-Merge-Kennzahlen
PR-Kennzahlen ausstehend

Beschreibung

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.

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
  3. Forke das Repository und arbeite in einem Branch.
  4. Öffne einen Pull Request, der die Issue-Nummer nennt.

Rechercherichtung

Reproduzieren Sie das Beispiel unter Python 3.9 oder 3.10 auf macOS oder Debian und konzentrieren Sie sich dabei auf das Herunterfahren von concurrent.futures.ThreadPoolExecutor und die Messung resource.RUSAGE_SELF ru_maxrss. Stellen Sie fest, ob der gemeldete Wert nach dem Herunterfahren sinken sollte, identifizieren Sie anschließend die relevante Implementierung oder die relevanten Tests und definieren Sie das erwartete Speicherverhalten nach dem Herunterfahren.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
python
Bereich
backend
Issue-Typ
Bug
Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Aktivitätsstatus
Veraltet
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
35/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.