Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
同时读取多个web套接字并用Python绘制数据_Python_Websocket - Fatal编程技术网

同时读取多个web套接字并用Python绘制数据

同时读取多个web套接字并用Python绘制数据,python,websocket,Python,Websocket,一般来说,我对脚本编写还比较陌生,我很确定这很简单,但我似乎找不到解决方案。我想使用pythonwebsockets库来监听多个websockets,以便获得有关加密价格的股票行情信息 为获取一种货币的提要提供了一个良好的开端 问题是run_forever()不允许我同时显示两个提要,因为我无法中断它。GDAX websocket允许您订阅多个提要对。 如下图所示,我同时订阅了BTC-USD和ETH-USD对。我想你可以订阅无限对 import websocket from json impor

一般来说,我对脚本编写还比较陌生,我很确定这很简单,但我似乎找不到解决方案。我想使用pythonwebsockets库来监听多个websockets,以便获得有关加密价格的股票行情信息

为获取一种货币的提要提供了一个良好的开端


问题是run_forever()不允许我同时显示两个提要,因为我无法中断它。

GDAX websocket允许您订阅多个提要对。 如下图所示,我同时订阅了
BTC-USD
ETH-USD
对。我想你可以订阅无限对

import websocket
from json import dumps, loads
try:
    import thread
except ImportError:
    import _thread as thread

def on_message(ws, message):
    parsed_msg = loads(message)
    print(parsed_msg["product_id"], parsed_msg["price"])

def on_open(ws):
    def run(*args):
        params = {
            "type": "subscribe",
            "channels": [{"name": "ticker", "product_ids": ["BTC-USD", "ETH-USD"]}]
        }
        ws.send(dumps(params))
    thread.start_new_thread(run, ())

if __name__ == "__main__":
    websocket.enableTrace(True)
    ws = websocket.WebSocketApp("wss://ws-feed.gdax.com", on_open=on_open, on_message = on_message)
    ws.run_forever()

如果出于某种原因GDAX不允许这样做,您可以在多个线程中打开多个web套接字,但在这种情况下,这是不必要的。

upvote!所以,如果你不介意回答的话,我想问一个简单的问题,上面的解决方案对GDAX非常有效,但是如果你有多个交换,你会在不同的线程中运行它们吗?如果您对node很熟悉,那么如果我们只有一个进程运行事件循环,您会怎么做呢?您可以这样做,但更好的解决方案是,特别是如果您发现自己正在处理多个连接,那么最好使用带有asyncio的事件循环。正如您所说,Nodejs在默认情况下使用事件循环,因此更加容易。您可以使用此库处理WebSocket:。事件循环旨在通过单个线程处理1000个请求。是的,如果两个打开的套接字在完全相同的时间接收数据,它们将不会被并行处理。一次发生在另一次之前,但这是故意的。我可以说得更详细一些,但是我已经没有角色了,哈哈。非常感谢!我担心的是,如果你有10个到不同交易所的连接,它们都每秒传输100000个项目,asyncio会不会在某个时候成为一个瓶颈,因此,如果asyncio可以以多线程的方式运行,或者如果node websocket或socketio library可以在多个进程上运行,我认为这在相当长的一段时间内都是一个不错的解决方案,我找不到任何关于这是否可行的信息,因此有这样的评论:)是的,当人们使用集群时,他们正在分叉主节点进程。因此,对于8个核心,您将有8个相同的进程来处理请求,这将使服务器每秒可处理的请求量大致增加x8。但对于您的情况,它不会起作用,虽然从技术上讲,每个进程可能运行不同的代码并连接到不同的套接字,但您绝对不应该这样做,听起来像是一个大的反模式。您应该能够在同一线程中打开多个套接字连接,我认为它应该足够快,只要你在回调函数中不做任何缓慢的阻塞计算,如加密、同步文件I/O等。如果你能尝试一下并回复我,我很想看看它是如何进行的,因为我个人以前没有做过类似的事情。也许我们应该拿着这个聊天?