async def broadcast(message):
data = json.dumps(message)
dead = []
tasks = []
for ws in clients:
tasks.append(ws.send_text(data))
results = await asyncio.gather(*tasks, return_exceptions=True)
for ws, result in zip(list(clients), results):
if isinstance(result, Exception):
dead.append(ws)
for ws in dead:
clients.remove(ws)
A safer version: