如何将连续的“async with”语句重写为循环?

2024-09-28 17:03:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我有下面的摘录,它在各个方面都很好,除了它要求我知道有多少WebSocket我计划提前打开。你知道吗

如果取而代之,我从一个主机列表开始,并且必须创建N个WebSocket连接,那么如何才能完成这段代码对3个WebSocket(通过“async with”)在循环中为N所做的工作呢?你知道吗

我已经在一个循环中有了一个等待,那就是我不知道如何“循环化”的“异步”。你知道吗

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)

Tags: 代码列表asyncwswebsocketsasconnectwith
1条回答
网友
1楼 · 发布于 2024-09-28 17:03:28

从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
    ]

相关问题 更多 >