python - 如何将连续的“async with”语句重写为循环?
问题描述
我有以下摘录,除了它要求我知道我计划提前打开多少个 WebSocket 之外,它在各个方面都很好用。
相反,如果我从主机列表开始并且必须创建 N 个 WebSocket 连接,那么我如何才能在循环中为 N 完成此代码为 3 个 Websockets(通过'async with')所做的事情?
我已经在一个循环中等待,这是我无法弄清楚如何“循环”的“异步”。
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 开始,模块中提供了AsyncExitStackcontextlib
,这就是它可以用于您的问题的方式:
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
]
推荐阅读
- r - The length of trainPred is not correct in prediction function with R
- scala - Scala解析器组合器几乎是最后一个
- javascript - 将相同长度的数组组合成对象数组
- html - AMP 仅适用于文章页面?
- python - PayPal IPN 沙盒 URL 当前已关闭?
- node.js - Node.JS 应用程序 - 任务和 API
- java - 如何使用 Thymleaf 在 Spring Boot 应用程序中正确缓存数据
- json - Reacts Js:解析wordpress页面的问题
- sql - 总结最后两条记录,包括组的最后一条记录
- powershell - 在 PowerShell 中处理日期时间