Hang in subprocess.Popen()
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 25/100
Línea de trabajo
Empieza leyendo pyannotate_runtime/collect_types.py alrededor de la llamada a Queue.put() mencionada en el informe; después, inspecciona el comportamiento de Python 2.7 POSIX subprocess.Popen() en Popen._execute_child(). Intenta reproducir el bloqueo con tracing habilitado y compáralo con pasar close_fds=True; se considera terminado cuando se haya establecido un fallo reproducible y se haya acordado un fix seguro.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
[UPDATE: If you have this problem, the solution is to pass close_fds=True to Popen()]
I've got a use case where a process being traced for type collection uses subprocess.Popen() to execute some helper program, and the Popen() call hangs at the line
data = _eintr_retry_call(os.read, errpipe_read, 1048576)
in Popen._execute_child(). (This is Python 2.7 on Mac, i.e. POSIX.)
That pipe has FD_CLOEXEC, so the child is not hitting the exec(). Presumably this is because it hangs in a Queue.put() operation in _trace_dispatch() (e.g. here).
I can think of a gross fix that monkey-patches os.fork to disable the profiling hook around the fork() so the child doesn't do this. But perhaps there's a more elegant solution (without using os.register_at_fork(), which is Python 3.7+ only)? Or the tracing hook could check the pid?
[UPDATE:] I can't repro this in a small test program. But it's real, and the os.fork monkey-patch fixes it. Not sure what to do about it yet, the monkey-patch seems risky.
- Lenguaje dominante
- Python
- Estrellas
- 1.4k
- Forks
- 59
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Preparar el entorno
- Sin Dockerfile ni archivo de Docker Compose
- Sin plantilla de pull request
- Leer la 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.
Más de dropbox/pyannotate
-
Dificultad 4/5 3-5 días Aptitud para principiantes 35/100
dropbox/pyannotate#124 · 3 reacciones ·
-
Test failures on Python 3.12Abierto
Dificultad 4/5 3-5 días Aptitud para principiantes 35/100
dropbox/pyannotate#123 ·
-
Dificultad 5/5 Más de una semana Aptitud para principiantes 25/100
dropbox/pyannotate#115 ·
-
Dificultad 3/5 1-2 días Aptitud para principiantes 35/100
dropbox/pyannotate#109 ·
-
Dificultad 5/5 Más de una semana Aptitud para principiantes 25/100
dropbox/pyannotate#103 · 6 comentarios · 1 reacción ·
Todos los issues de dropbox/pyannotate
Issues similares
-
customer-reported question
Dificultad 2/5 1-3 horas Aptitud para principiantes 62/100
Azure/azure-sdk-for-python#49548 · 1 comentario · 1 reacción ·
Los mantenedores suelen responder en 1 día
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 88/100
btclib-org/btclib-wallet#409 ·
Los mantenedores suelen responder en 1 día
-
Phase 2 PSA Capability & Career Profile
Dificultad 2/5 1-3 horas Aptitud para principiantes 62/100
bcgov/digital-journeys#2310 ·
-
bug good first issue
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
fastmachinelearning/hls4ml#1582 ·
Los mantenedores suelen responder en 3 días
-
Sort modelsAbiertoenhancement good first issue
Dificultad 2/5 1-3 horas Aptitud para principiantes 62/100
Los mantenedores suelen responder en 1 día