Background Workers

Updated Dec 08, 2025
  • Use WorkerController to start/stop async tasks during ASGI lifespan.
  • Prefer @app.lifespan to wire startup/shutdown; workers can depend on the same DI container used for WebSocket resources.
from falcon_pachinko import WorkerController, worker

controller = WorkerController()

@worker
async def broadcaster(*, conn_mgr):
    async for ws in conn_mgr.connections():
        await ws.send_media({"type": "ping"})

@app.lifespan
async def lifespan(app):
    await controller.start(broadcaster, conn_mgr=app.ws_connection_manager)
    yield
    await controller.stop()