【发布时间】:2021-07-26 09:42:40
【问题描述】:
以下代码试图从“连接”集中获取流消息。我试图弄清楚如何从每个流中提取两个浮点值来计算商。聚合的流消息看起来是无序的和非连续的,如果我声明全局变量并尝试迭代地填充它们,我的例程就会停止。我希望能够连接到多个流并使用消息数据生成实时计算值/结果。如果可以的话请帮忙。我是 python 和 asyncio 的新手。
代码如下:
import asyncio
import websockets
import json
connections = set()
connections.add("mystream1")
connections.add("mystream2")
async def handle_socket1(url):
async with websockets.connect(url) as websocket1:
async for message in websocket1:
json_msg = json.loads(message)
if json_msg["X"] == "A":
value1 = float(json_msg["b"])
if json_msg["Y"] == "B":
value2 = float(json_msg["a"])
print(value2/value1)
async def handler1():
await asyncio.wait([handle_socket1(url) for url in connections])
【问题讨论】:
-
您发布的代码是计算单个流的商。您希望如何计算两个不同流的商?你想将
json_msg["a"]与另一个流中的json_msg["b"]分开吗? -
另外,当一个值从一个流到达,但(还没有)从另一个流到达时会发生什么:应该立即重新计算商,还是代码应该等待新值在两个流中到达流?
-
我想这解释了为什么我总是得到 0 的流值之一!理想情况下,我想同时连接到两个流,然后使用每个最新流中的一条数据计算最新商。我想不断刷新商,就好像它是一个实时值。
标签: python websocket async-await python-asyncio