On Windows, creating a multiprocessing pool leaks handles
Nessuno ha ancora preso questa issue.
- Lingua principale
- Python
- Stelle
- 77.2k
- Fork
- 35.9k
- Metriche di merge delle PR
- Metriche PR in attesa
Descrizione
Example:
import ctypes.wintypes
import gc
import multiprocessing.pool
kernel32 = ctypes.WinDLL('kernel32', use_last_error=True)
kernel32.GetCurrentProcess.argtypes = ()
kernel32.GetCurrentProcess.restype = ctypes.wintypes.HANDLE
kernel32.GetProcessHandleCount.argtypes = (ctypes.wintypes.HANDLE, ctypes.wintypes.LPDWORD)
kernel32.GetProcessHandleCount.restype = ctypes.wintypes.BOOL
def handle_count():
# Pseudo-handle that doesn't need to be closed
hproc = kernel32.GetCurrentProcess()
handle_count = ctypes.wintypes.DWORD()
if not kernel32.GetProcessHandleCount(hproc, ctypes.byref(handle_count)):
raise ctypes.WinError(ctypes.get_last_error())
return handle_count.value
def func():
pool = multiprocessing.pool.Pool(1)
pool.terminate()
pool.join()
pool.close()
pool = None
gc.collect()
def main():
print("Initial handle count:", handle_count())
for _ in range(4):
func()
print("Handle count:", handle_count())
if __name__ == "__main__":
main()
Output with Python 3.16 on Windows:
Initial handle count: 116
Handle count: 123
Handle count: 127
Handle count: 131
Handle count: 135
I discovered the issue while working on PR gh-154140 which detects leaks of Windows handles in the Python test suite.
Linked PRs
- gh-154365
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Direzione di ricerca
Inizia riproducendo main() e func() su Windows, quindi traccia la creazione e la terminazione di multiprocessing.pool.Pool per identificare quali handle rimangono aperti. Esamina gh-154365 e il contesto della perdita di handle di gh-154140. Il lavoro è completato quando la creazione ripetuta di pool non aumenta più il numero di handle del processo segnalato.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- python
- Ambito
- operating-systems
- Tipo di issue
- Bug
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Stato di attività
- Ferma
- Chiarezza
- Abbastanza chiara
- Idoneità per principianti
- 35/100