我尝试以一种非常简单的方式绘制二进制标记的实时数据。代码检索数据,但取决于我使用ws变量声明的代码行所在的位置-代码要么打印市场数据,但没有出现曲线图-或者-绘图窗口出现,但保持为空,并且没有打印市场数据。如果关闭plot window (绘图窗口),将检索并打印市场数据
我做错了什么?
import websocket, json, pprint
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
SOCKET = "wss://stream.binance.com:9443/ws/ethusdt@kline_1m"
plt.style.use('fivethirtyeight')
x_vals = []
y_vals = []
time = 0
close = 0
def on_open(ws):
print('opened connection')
def on_close(ws):
print('closed connection')
def on_message(ws, message):
json_message = json.loads(message)
global time
global close
time = json_message['k']['T']
pprint.pprint(json_message)
close = json_message['k']['c']
is_bar_closed = json_message['k']['x']
if is_bar_closed:
print("bar closed at {}".format(close))
def animate(i):
x_vals.append(time)
y_vals.append(close)
plt.cla()
plt.plot(x_vals, y_vals)
ani = FuncAnimation(plt.gcf(), animate, interval = 200)
plt.tight_layout()
plt.show()
ws = websocket.WebSocketApp(SOCKET, on_open=on_open, on_close=on_close, on_message=on_message)
ws.run_forever()发布于 2021-03-28 05:21:13
plt.show()和ws.run_forever()都会阻塞程序的执行。根据之前执行的指令,代码要么绘制一个空图像(执行停止,直到您关闭绘图窗口),要么开始从套接字获取数据,但永远不会执行绘图指令。
在本例中,为了避免程序在plt.show()处停止,您可以使用plt.show(block=False)作为推荐的here。
https://stackoverflow.com/questions/66833880
复制相似问题