concurrent.futures.ThreadPoolExecutor does not free memory when shutdown
Dieses Issue hat noch niemand übernommen.
- 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
Erste Schritte
- Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
- Forke das Repository und arbeite in einem Branch.
- Ö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