DEV Community

William Rodriguez
William Rodriguez

Posted on

Mantén el hilo principal con vida: Ejecución no bloqueante con run_async.

Mantén el hilo principal con vida: Ejecución no bloqueante con run_async.

No deberías necesitar una máquina virtual dedicada solo para correr un bot de Telegram junto a tu app en FastAPI. run_consumers(block=False) de wconnect corre en segundo plano sin bloquear tu servidor.

Así se implementa Non-Blocking Async Consumers en entornos reales con wconnect:

import time
from wconnect import Wtelegram, WMessage

bot = Wtelegram()

@bot.on_command(command="ping")
def ping(msg: WMessage):
    bot.send(to=msg.chat_id, message="pong 🏓")

# Launch in background thread without blocking main application
thread = bot.run_consumers(block=False)
print(f"Bot listening in daemon thread: {thread.name}")

# Main application continues executing (FastAPI / ETL pipeline / worker)
for step in range(3):
    print(f"Main loop executing batch #{step}")
    time.sleep(1)

bot.stop_consumers()
Enter fullscreen mode Exit fullscreen mode

Por qué es clave:

  • Decoradores sin boilerplate (@bot.on_command, @bot.on_message, @bot.consumer).
  • Streaming de archivos binarios directo desde RAM usando WFile.
  • Poller daemon no bloqueante con run_consumers(block=False).

¡Visita el repositorio en GitHub!

Top comments (0)