Solicitudes asíncronas en Python
- Solicitudes asíncronas en Python
- Importancia de usar solicitudes asíncronas en Python
- la forma más fácil de escribir solicitudes asíncronas en Python
- Manejar solicitudes asíncronas en Python
- Bibliotecas de Python requeridas para solicitudes asincrónicas
- Solicitudes asincrónicas frente a solicitudes regulares
-
Solicitudes
Async
en Python
Hoy aprenderemos sobre las solicitudes asincrónicas; esta discusión conducirá al código de ejemplo para ver cómo podemos escribir solicitudes asincrónicas en Python.
Solicitudes asíncronas en Python
Las solicitudes asincrónicas son el corazón de nuestro sistema. Podemos pensar en ellos de la siguiente manera:
Cuando un usuario carga nuestro sitio (sitio web o aplicación web), el usuario inmediatamente comienza a ver el contenido. Pero no está del todo listo. Entonces cargamos el contenido de forma asincrónica en segundo plano mientras el usuario continúa interactuando con la página.
Estas solicitudes no bloquean la ejecución del código posterior mientras esperan una respuesta. Eso significa que otro código puede continuar ejecutándose mientras se procesa la solicitud.
Puede ser útil cuando se trata de recursos externos, como llamadas API, que pueden tardar un tiempo en responder. También puede hacer que su código responda mejor, ya que la interfaz de usuario puede continuar actualizándose mientras se procesa una solicitud.
Importancia de usar solicitudes asíncronas en Python
Las solicitudes asíncronas son una excelente manera de mejorar el rendimiento de nuestra aplicación Python. Cuando se realiza una solicitud, el intérprete de Python puede continuar ejecutando otro código mientras se procesa la solicitud.
Puede causar un aumento significativo en la velocidad, especialmente para aplicaciones que realizan muchas solicitudes. Sin embargo, los siguientes son algunos puntos esenciales que debe recordar al usar solicitudes asincrónicas.
- Primero, debemos evitar hacer demasiadas solicitudes simultáneamente. El intérprete puede abrumarse y ralentizarse si hacemos demasiadas solicitudes.
- En segundo lugar, debemos estar preparados para manejar los errores. Si una solicitud falla, el intérprete no puede continuar ejecutando el código.
En general, las solicitudes asincrónicas son una gran herramienta para mejorar el rendimiento de nuestra aplicación Python. Pero, úsalo con cuidado; pueden ayudar a que nuestra aplicación funcione más rápido y sin problemas.
la forma más fácil de escribir solicitudes asíncronas en Python
Las solicitudes asíncronas se realizan utilizando el módulo asyncio
fácilmente. Además, la biblioteca asyncio
de python proporciona herramientas para escribir código asíncrono. Por ejemplo, podemos usar asyncio.sleep()
para pausar una rutina y asyncio.wait()
para esperar a que se complete una rutina.
Para escribir una solicitud asíncrona, primero debemos crear una rutina. Podemos hacerlo usando la función asyncio.ensure_future()
. Una vez que tenemos una rutina, podemos usar la función asyncio.sleep()
para pausarla y la función asyncio.wait()
para esperar a que se complete.
Manejar solicitudes asíncronas en Python
Primero, si queremos ejecutar las solicitudes asincrónicas en Python, debe instalar la biblioteca de python de aiohttp
usando el siguiente comando.
pip install aiohttp
Podemos usar solicitudes asincrónicas para mejorar el rendimiento de las aplicaciones de python. Al realizar solicitudes en paralelo, podemos acelerar drásticamente el proceso.
Hay algunas formas diferentes de manejar solicitudes asincrónicas en Python. La más popular es la biblioteca asyncio
. Esta biblioteca proporciona herramientas poderosas para tratar con solicitudes asincrónicas
.
Otra opción popular es la biblioteca grequests
. Esta biblioteca es un poco más simple de usar que asyncio
, pero puede ser igual de efectiva.
La opción que seleccionemos dependerá de nuestras necesidades específicas. Pero cualquiera que elijamos, estamos seguros de que veremos un aumento significativo en el rendimiento al hacer que nuestras solicitudes sean asincrónicas
.
import grequests
urls = [
"http://www.heroku.com",
"http://tablib.org",
"http://httpbin.org",
"http://python-requests.org",
"http://kennethreitz.com",
]
rs = (grequests.get(u) for u in urls)
grequests.map(rs)
Bibliotecas de Python requeridas para solicitudes asincrónicas
Podemos usar numerosas bibliotecas de Python para realizar solicitudes asíncronas. Los más populares son aiohttp
y asyncio
.
Biblioteca aiohttp
para solicitudes asíncronas
aiohttp
es una biblioteca que nos permite realizar solicitudes HTTP asíncronas. Está construido sobre asyncio
y proporciona una interfaz simple para realizar solicitudes HTTP.
Biblioteca asyncio
para solicitudes asíncronas
asyncio
es una biblioteca que admite la programación asíncrona en Python. Nos permite escribir código asincrónico y facilita el uso de bibliotecas compatibles con asyncio
.
Tanto aiohttp
como asyncio
están disponibles en PyPI
y se pueden instalar usando pip.
import asyncio
import aiohttp
import json
from text_api_config import apikey
Solicitudes asincrónicas frente a solicitudes regulares
Podemos realizar dos tipos de solicitudes a un servidor: asíncronas y regulares. Las solicitudes asincrónicas se realizan en segundo plano mientras el usuario aún interactúa con la página. Las solicitudes típicas se realizan mientras se carga la página.
Las solicitudes asincrónicas son generalmente más rápidas y eficientes que las solicitudes normales, ya que no bloquean la carga de la página. Sin embargo, pueden ser más complejos de implementar y no todos los navegadores siempre los admiten.
Ejemplo de código:
import requests
import time
start_time = time.time()
for number in range(1, 151):
url = f"https://pokeapi.co/api/v2/pokemon/{number}"
resp = requests.get(url)
pokemon = resp.json()
print(pokemon["name"])
print("--- %s seconds ---" % (time.time() - start_time))
Producción :
bulbasaur
ivysaur
venusaur
....
dragonair
dragonite
mewtwo
--- 68.17992424964905 seconds
el Módulo asyncio
en Python
asyncio
es un módulo para programación concurrente en Python. Proporciona un marco para administrar subprocesos, tareas y eventos simultáneos. asyncio
se usa para escribir programas que pueden realizar múltiples tareas al mismo tiempo.
asyncio
se basa en el concepto de rutinas. Una rutina es una función que puede suspender su ejecución y devolver el control a la persona que llama. Permite que varias corrutinas se ejecuten al mismo tiempo.
asyncio
proporciona herramientas para administrar corrutinas, incluido un ciclo de eventos, un programador de tareas y estructuras de datos concurrentes.
asyncio
es una forma eficiente de escribir programas concurrentes. Es fácil de usar y puede escalar a programas grandes. asyncio
es una excelente opción para programas que requieren múltiples tareas al mismo tiempo.
Ejemplo de código:
import asyncio
import aiohttp
import json
from text_api_config import apikey
async def gather_with_concurrency(n, *tasks):
semaphore = asyncio.Semaphore(n)
async def sem_task(task):
async with semaphore:
return await task
return await asyncio.gather(*(sem_task(task) for task in tasks))
el Módulo aiohttp
en Python
El módulo aiohttp
es un cliente/servidor HTTP asíncrono para Python. Se basa en asyncio
y proporciona una API simple para trabajar con HTTP.
El módulo aiohttp
facilita el trabajo con HTTP en Python. Proporciona una API simple que facilita el envío y la recepción de solicitudes y respuestas HTTP.
El módulo aiohttp
también proporciona una forma de ejecutar un servidor HTTP asíncrono.
import asyncio
import aiohttp
import json
from text_api_config import apikey
async def main():
conn = aiohttp.TCPConnector(limit=None, ttl_dns_cache=300)
session = aiohttp.ClientSession(connector=conn)
urls = [summarize_url, ner_url, mcp_url]
conc_req = 3
Solicitudes Async
en Python
Ejemplo de código:
import queue
def task1(name, s_queue):
if s_queue.empty():
print(f"Task {name} has nothing to do")
else:
while not s_queue.empty():
cnt = s_queue.get()
total = 0
for x in range(cnt):
print(f"Task {name} is working now.")
total += 1
print(f"Task {name} is working with a total of: {total}")
def s_async():
s_queue = queue.Queue()
for work in [2, 5, 10, 15, 20]:
s_queue.put(work)
tasks = [
(task1, "Async1", s_queue),
(task1, "Async2", s_queue),
(task1, "Async3", s_queue),
]
for t, n, q in tasks:
t(n, q)
if __name__ == "__main__":
s_async()
Producción :
Task Async1 is running now.
Task Async1 is running with a total of: 2
Task Async1 is running now
...
Task Async1 is running now.
Task Async1 is running with a total of: 5
Task Async1 is running now
...
Task Async1 is running now.
Task Async1 is running with a total of: 10
Task Async1 is running now
...
Task Async1 is running now.
Task Async1 is running with a total of: 15
Task Async1 is running now
...
Task Async1 is running now.
Task Async1 is running with a total of: 20
Task Async3 has nothing to do
Zeeshan is a detail oriented software engineer that helps companies and individuals make their lives and easier with software solutions.
LinkedIn