如何将连续的"异步"语句重写成循环?



我有以下摘录,它在各个方面都工作正常,除了它要求我知道我计划提前打开多少个WebSocket。

相反,如果我从主机列表开始,并且必须创建 N 个 WebSocket 连接,我如何完成这段代码在循环中为 N 的 3 个 Websocket(通过"异步"(所做的工作?

我已经在循环中的等待,是我无法弄清楚如何"循环"的"异步"。

async with websockets.connect('ws://192.168.0.174:81') as websocket1:
async with websockets.connect('ws://192.168.0.194:81') as websocket2:
async with websockets.connect('ws://192.168.0.179:81') as websocket3:
datatosend = GetBallData()
for socket in [websocket1, websocket2, websocket3]:
await socket.send(datatosend)

从 Python3.7 开始,contextlib模块中提供了 AsyncExitStack,这是它如何用于您的问题:

hosts = ['ws://192.168.0.174:81', 'ws://192.168.0.194:81', 'ws://192.168.0.179:81']
async with contextlib.AsyncExitStack() as stack:
sockets = [
await stack.enter_async_context(websockets.connect(host))
for host in hosts
]

最新更新