• Empleos
  • Sobre nosotros
  • profesionales
    • Inicio
    • Empleos
    • Cursos y retos
  • empresas
    • Inicio
    • Publicar vacante
    • Nuestro proceso
    • Precios
    • Evaluaciones
    • Nómina
    • Blog
    • Comercial
    • Calculadora de salario

0

588
Vistas
asyncpg - conexión vs grupo de conexiones

Estoy revisando la documentación de asyncpg y tengo problemas para entender por qué usar un grupo de conexiones en lugar de una sola conexión.

En el ejemplo dado , se utiliza un grupo:

 async with pool.acquire() as connection: async with connection.transaction(): result = await connection.fetchval('select 2 ^ $1', power) return web.Response( text="2 ^ {} is {}".format(power, result))

pero también podría hacerse creando una conexión cuando sea necesario:

 connection = await asyncpg.connect(user='postgres') async with connection.transaction(): result = await connection.fetchval('select 2 ^ $1', power) return web.Response( text="2 ^ {} is {}".format(power, result))

¿Cuál es la ventaja de usar grupos sobre conexiones según sea necesario?

over 3 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Establecer una conexión con un servidor de base de datos es una operación costosa. Los pools de conexión son una técnica común que permite evitar pagar ese costo. Un grupo mantiene abiertas las conexiones y las alquila cuando es necesario.

Es fácil ver los beneficios de un grupo al hacer un punto de referencia simple:

 async def bench_asyncpg_con(): power = 2 start = time.monotonic() for i in range(1, 1000): con = await asyncpg.connect(user='postgres', host='127.0.0.1') await con.fetchval('select 2 ^ $1', power) await con.close() end = time.monotonic() print(end - start)

Lo anterior se completa en mi máquina en 1.568 segundos.

Mientras que la versión de la piscina:

 async def bench_asyncpg_pool(): pool = await asyncpg.create_pool(user='postgres', host='127.0.0.1') power = 2 start = time.monotonic() for i in range(1, 1000): async with pool.acquire() as con: await con.fetchval('select 2 ^ $1', power) await pool.close() end = time.monotonic() print(end - start)

Corre en 0,234 segundos, o 6,7 veces más rápido .

over 3 years ago · Santiago Trujillo Denunciar

0

Elvis Pranskevichus mostró dos puntos de referencia arriba. Tomé el primero bench_asyncpg_con y lo edité, moviendo la con fuera del bucle:

 async def bench_asyncpg_con_2(): power = 2 start = time.monotonic() con = await asyncpg.connect(**data) for i in range(1, 1000): await con.fetchval('select 2 ^ $1', power) await con.close() end = time.monotonic() print(end - start)

Y esto funcionó mucho más rápido que bench_asyncpg_pool

Obtuve 0.45 en esto, mientras que obtuve

1.62 en bench_asyncpg_pool y

63.18 en bench_asyncpg_con

Soy un poco novato en el uso de esta biblioteca y pienso que una con para todo un proyecto sería una buena opción. Corrígeme si estoy equivocado. lo apreciaré

over 3 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Nuestro proceso Comercial
Legal
Términos y condiciones Política de privacidad
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recomiéndame algunas ofertas
Necesito ayuda