Setting limits in sub-process
Los mantenedores suelen responder en 1 día
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 25/100
- Tipo de issue
- Error
- Claridad
- Bastante claro
- Estado de actividad
- Estancado
- Stack tecnológico
- python
- Área
- backend, distributed-systems
Línea de trabajo
Start by reproducing the supplied multiprocessing fork example on AlmaLinux 8.9 with Python 3.12.3 and threadpoolctl 3.4.0, then trace the library scan through libc.dl_iterate_phdr and match_library. Compare the behavior with CentOS 7; the issue reports the scan hanging in the newer environment. Done means identifying and fixing the hang, with a regression test for the reported subprocess scenario.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Calling threadpool_limits in a sub-process fails (hangs) on some of my servers but fails in ones with a specific OS version:
$ hostnamectl
Static hostname: n86.my.domain
Icon name: computer-server
Chassis: server
Machine ID: 196b497eccff4526a8e34834c95e3de5
Boot ID: b8318d26cd394a85b706beb2d7324f73
Operating System: AlmaLinux 8.9 (Midnight Oncilla)
CPE OS Name: cpe:/o:almalinux:almalinux:8::baseos
Kernel: Linux 4.18.0-513.18.2.el8_9.x86_64
Architecture: x86-64
The code is:
import os
import sys
from threadpoolctl import threadpool_limits
from multiprocessing import get_context
def eprintln(text):
print(text, file=sys.stderr, flush=True)
DID_THREADCTL_FOR_PID = None
def invocation(index: int) -> int:
global DID_THREADCTL_FOR_PID
if os.getpid() != DID_THREADCTL_FOR_PID:
DID_THREADCTL_FOR_PID = os.getpid()
eprintln(f"PID: {os.getpid()} invocation index: {index} Do threadpool_limits...")
threadpool_limits(limits=1)
eprintln(f"PID: {os.getpid()} invocation index: {index} Did threadpool_limits.")
else:
eprintln(f"PID: {os.getpid()} invocation index: {index} Old threadpool_limits.")
return index
invocations = 4
processes = 2
threadpool_limits(limits=processes)
results = [None] * invocations
eprintln(f"PID: {os.getpid()} Do imap...")
with get_context("fork").Pool(2) as pool:
for index in pool.imap_unordered(invocation, range(invocations)):
results[index] = index
eprintln(f"PID: {os.getpid()} - Did imap index: {index}")
eprintln(f"PID: {os.getpid()} Did imap results: {results}")
assert results == list(range(len(results)))
When I run it on the above OS, in Python 3.12.3, threadpoolctl version 3.4.0, I get:
$ python3 bug.py
PID: 1576849 Do imap...
PID: 1576852 invocation index: 0 Do threadpool_limits...
PID: 1576853 invocation index: 1 Do threadpool_limits...
PID: 1576853 invocation index: 1 Did threadpool_limits.
PID: 1576853 invocation index: 2 Old threadpool_limits.
PID: 1576853 invocation index: 3 Old threadpool_limits.
PID: 1576849 - Did imap index: 1
PID: 1576849 - Did imap index: 2
PID: 1576849 - Did imap index: 3
And the process hangs. Poking around it seems that libc.dl_iterate_phdr does not return (each match_library_callback call does return). I am using a Python 3.12.3 that was compiled from source on this OS, followed by pip installation of numpy, pandas, scipy etc.
This same thing works fine in older versions of the OS. E.g., in:
$ hostnamectl
Static hostname: n97.my.domain
Icon name: computer-server
Chassis: server
Machine ID: 5e543d50691943628e8e20441f502406
Boot ID: 0d876250c0ec4a149e8bdb12c99c20eb
Operating System: CentOS Linux 7 (Core)
CPE OS Name: cpe:/o:centos:centos:7
Kernel: Linux 3.10.0-1160.15.2.el7.x86_64
Architecture: x86-64
With Python version 3.12.2, again with threadpoolctl version 3.4.0, I get the expected output:
$ python3 bug.py
PID: 32872 Do imap...
PID: 32874 invocation index: 0 Do threadpool_limits...
PID: 32875 invocation index: 1 Do threadpool_limits...
PID: 32874 invocation index: 0 Did threadpool_limits.
PID: 32875 invocation index: 1 Did threadpool_limits.
PID: 32874 invocation index: 2 Old threadpool_limits.
PID: 32872 - Did imap index: 0
PID: 32875 invocation index: 3 Old threadpool_limits.
PID: 32872 - Did imap index: 1
PID: 32872 - Did imap index: 2
PID: 32872 - Did imap index: 3
PID: 32872 Did imap results: [0, 1, 2, 3]
Any ideas on what I can do to fix this?
- Lenguaje dominante
- Python
- Estrellas
- 434
- Forks
- 38
- Merge medio
- 2 d 14 h
- PR fusionados (30 d)
- 8
Preparar el entorno
Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.
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 joblib/threadpoolctl
-
Dificultad 5/5 Más de una semana Aptitud para principiantes 25/100
joblib/threadpoolctl#274 ·
Los mantenedores suelen responder en 1 día
-
Make it possible to set active/spin wait behavior of LLVM/Intel OpenMP via `kmp_set_blocktime`Abierto
Dificultad 4/5 3-5 días Aptitud para principiantes 25/100
joblib/threadpoolctl#271 ·
Los mantenedores suelen responder en 1 día
-
Make it possible to inspect active/spin wait behavior of LLVM/Intel OpenMP via `kmp_get_blocktime`Abierto
Dificultad 3/5 1-2 días Aptitud para principiantes 42/100
joblib/threadpoolctl#270 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 4/5 3-5 días Aptitud para principiantes 22/100
joblib/threadpoolctl#261 · 3 comentarios ·
Los mantenedores suelen responder en 1 día
-
Opt-in API that has a cached `ThreadpoolController`Posiblemente ocupada @itamarst la tomó hace 28 días. Abierto
Dificultad 4/5 3-5 días Aptitud para principiantes 25/100
joblib/threadpoolctl#254 · 3 comentarios ·
Los mantenedores suelen responder en 1 día
Todos los issues de joblib/threadpoolctl
Issues similares
-
comp/tools P2 type/bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
NousResearch/hermes-agent#142908 · 1 comentario ·
-
[oblt-aw][autodoc] Fix malformed headings in new Buildkite docs pagesPosiblemente ocupada @github-actions la tomó hoy. Abiertodocumentation
Dificultad 1/5 Menos de una hora Aptitud para principiantes 83/100
Los mantenedores suelen responder en 1 día
-
[Bug]: fileUploadMatrix.test.ts URL case does a real DNS lookup and fails offlinePosiblemente ocupada @r2jaff la tomó hoy. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
ComposioHQ/composio#5054 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 88/100
Los mantenedores suelen responder en 1 día
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
pytorch/tensordict#3286 ·
Los mantenedores suelen responder en 1 día