Server.serve_forever() isn't cancelled when Server.close() is called
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 35/100
- Tipo de issue
- Error
- Claridad
- Bastante claro
- Estado de actividad
- Estancado
- Stack tecnológico
- python
- Área
- backend, networking
Línea de trabajo
Comienza comparando el comportamiento del servidor de uvloop con la implementación de CPython enlazada en Lib/asyncio/base_events.py alrededor de las líneas 341–344, centrándote en Server.serve_forever() y Server.close(). Reproduce el problema con el ejemplo de SIGTERM proporcionado y confirma que cerrar el servidor hace que serve_forever() lance asyncio.CancelledError e imprima “Shutting down” antes de salir.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
- uvloop version: 0.19.0
- Python version: 3.10.12 (3.10.12-1~22.04.3)
- Platform: Ubuntu 22.04.4
- Can you reproduce the bug with
PYTHONASYNCIODEBUGin env?: Yes - Does uvloop behave differently from vanilla asyncio? How?: Yes, described below.
With stock asyncio, after awaiting on Server.serve_forever(), calling Server.close() causes the await statement to throw CancelledError. With uvloop's implementation, the listening socket is correctly closed, however the await statement blocks indefinitely.
Example:
async def run_server():
async with await asyncio.start_server(lambda r,w: w.close(), '127.0.0.1', 8080) as server:
server.get_loop().add_signal_handler(15, lambda: server.close())
try:
await server.serve_forever()
except asyncio.CancelledError:
print('Shutting down')
uvloop.run(run_server())
The uvloop version closes the listening socket in response to SIGTERM, but never exits. The stock version prints Shutting down and exits.
Here's the CPython source where this is implemented:
https://github.com/python/cpython/blob/v3.8.18/Lib/asyncio/base_events.py#L341-L344
Thanks for taking a look!
- Lenguaje dominante
- Cython
- Estrellas
- 11.9k
- Forks
- 615
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Guía de contribución
No hay ninguna guía de contribución indexada para este repositorio
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 MagicStack/uvloop
-
License not clear Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
MagicStack/uvloop#759 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
MagicStack/uvloop#741 · 2 reacciones ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
MagicStack/uvloop#702 · 8 comentarios · 9 reacciones ·
-
Dificultad 4/5 3-5 días Aptitud para principiantes 25/100
MagicStack/uvloop#766 ·
-
Directly constructed subprocess pipe protocols segfault when callbacks use a non-process owner Abierto
Dificultad 4/5 3-5 días Aptitud para principiantes 52/100
MagicStack/uvloop#765 ·
Todos los issues de MagicStack/uvloop
Issues similares
-
enhancement
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
canonical/paas-charm#368 · 1 comentario ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
-
tech debt
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
-
area:workflow bug ready-for-agent
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
fil-donadoni/tolaria#4409 ·
-
status/awaiting_triage
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100