- Use
WorkerControllerto start/stop async tasks during ASGI lifespan. - Prefer
@app.lifespanto 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()