MagicStack / MagicStack/asyncpg

Application Flow Stuck Unless Connection is Explicitly Closed

Abierto
#1,216 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Lenguaje dominante
Python
Estrellas
8.1k
Forks
468
Métricas de merge de PR
Sin PR fusionados en 30 d

Descripción

* **asyncpg version**: 0.30.0
* **PostgreSQL version**: 16
* **Do you use a PostgreSQL SaaS? If so, which?**: Yes, I am using NeonDB
* **Can you reproduce the issue with a local PostgreSQL install?**: Didn't attempt it.
* **Python version**: 3.11.0
* **Platform**: Windows
* **Do you use pgbouncer?**: No
* **Did you install asyncpg with pip?**: Yes
* **If you built asyncpg locally, which version of Cython did you use?**: [Your Cython version if applicable]
* **Can the issue be reproduced under both asyncio and
[uvloop](https://github.com/magicstack/uvloop)?**: [Yes/No] I did not try uvloop

I'm encountering an issue where the flow of my application gets stuck unless the database connection is explicitly closed after a query, even though it should be managed automatically by the context manager.

**Code Example**:
```python
async def read_record(self, request_details: dict):
"""
Retrieve records based on conditions and request_type.

Args:
request_details (dict): The conditions including request_type.

Returns:
list: The records that match the conditions.
"""
table = self.get_table_name(request_details['request_type'])
conditions = {key: request_details[key] for key in request_details if key != 'request_type'}
condition_str = " AND ".join(f"{key} = ${i+1}" for i, key in enumerate(conditions.keys()))
query = f"SELECT * FROM {table} WHERE {condition_str};"

async with self.get_connection() as conn:
conn.add_log_listener(lambda connection, message: logger.info("PostgreSQL log message: %s", message))
result = await conn.fetch(query, *conditions.values())
logger.info("Fetched records: %s", result)
# await conn.close() # get's stuck without this line

return result
```

Guía de contribución

No hay ninguna guía de contribución indexada para este repositorio

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Línea de trabajo

Comienza con el ejemplo proporcionado de asyncpg 0.30.0 y reprodúcelo en Python 3.11, PostgreSQL 16 y Windows, confirmando primero si el problema se produce con una instalación local de PostgreSQL. Investiga el comportamiento del gestor de contexto asíncrono alrededor de `self.get_connection()` y compáralo con el caso de `conn.close()` explícito; se considerará terminado cuando el flujo se complete sin requerir ese cierre explícito.

Escrito por el modelo de indexación a partir del texto del issue.

Evaluación

Stack tecnológico
postgresql, python
Área
backend, databases
Tipo de issue
Error
Dificultad
3/5
Tiempo estimado
1-2 días
Estado de actividad
Estancado
Claridad
Necesita aclaración
Aptitud para principiantes
25/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.