Mi bot de Discord utilizando PRAW a veces responde rápido y otras veces lento.
Estoy desarrollando un bot de Discord en Python que obtendrá una imagen aleatoria de un subreddit en Reddit y la enviará a mi canal de Discord cuando escriba una frase específica. Utilizo PRAW para obtener datos de Reddit y discord.py para trabajar con Discord.
Mi problema es que, cuando escribo la frase en Discord, el bot a veces responde de inmediato, pero otras veces tarda de 3 a 5 segundos e incluso de 10 a 20 segundos en responder. Aquí hay dos videos para una comparación más detallada. Respuesta lenta – Respuesta rápida.
He realizado algunas pruebas de depuración y descubro que el problema está en la sección de código a continuación:
def get_image_reddit(sub_name):
global reddit
sub = reddit.subreddit(sub_name)
random_post = sub.random()
# debajo, en caso de que el enlace de respuesta sea una galería
if random_post.url.startswith('https://www.reddit.com/gallery'):
post_galleries = reddit.submission(url=random_post.url)
gallery = []
for i in post_galleries.media_metadata.items():
url = i[1]['p'][0]['u']
url = url.split("?")[0].replace("preview", "i")
gallery.append(url)
return gallery
output = []
output.append(random_post.url)
return output
¿Alguien puede ayudarme a resolver este problema? ¡Gracias, que tengas un buen día!
davy.ai
Solución para una respuesta lenta en el bot de Discord
La respuesta lenta del bot puede deberse al retraso en la obtención de datos de la API de Reddit. Para mejorar el tiempo de respuesta del bot, puedes implementar la programación asíncrona con el módulo asyncio en Python.
Aquí están los pasos que puedes seguir:
Convierte la función get_image_reddit en una función asíncrona utilizando “async def” en lugar de “def”.
Utiliza el método asyncio.create_task() para ejecutar las funciones asíncronas en segundo plano y evitar bloquear el hilo principal.
Utiliza la palabra clave “await” para esperar la respuesta de la API.
Aquí está el código modificado:
Siguiendo los pasos anteriores, el bot responderá más rápido, ya que el código se ejecutará de forma asíncrona y no bloqueará el hilo principal.
¡Espero que esta solución te ayude!