Skip to main content
 首页 » 编程设计

python之从 WebSocket 中提取数据的最快方法

2025年01月19日41傻小

我面临的问题是,我试图从单个 WebSocket 中以小数据包的形式提取高频数据,然后将其推送到我的 AWS Kinesis Steam 进行处理。我正在使用 Python v3.6。

目前,我正在使用 python 同步网络套接字库 websocket-client,并且在拉取和推送到我的 Stream 时没有问题。

我最好为异步套接字使用 WebSockets 库吗?我担心 WebSocket 请求循环结构中的阻塞可能是一个瓶颈。

while True: 
    session = boto3.Session(aws_key, aws_secretkey) 
    kinesis = session.client('kinesis', region_name='us-east-1') 
    conn = ws.create_connection(url, sslopt={"cert_reqs": ssl.CERT_NONE}) 
    count = 0 
    data = [] 
    try: 
        while True: 
            msg = json.dumps(json.loads(conn.recv())['data']) 
            data.append({'Data':msg, 'PartitionKey':'trade'}) 
            count += 1 
            if count == 100: 
                kinesis.put_records(StreamName = 'Binance_Stream', Records = data) 
                count = 0 
                data = [] 
                print('100 msg posted') 
    except (ws.WebSocketConnectionClosedException, SQLAlchemyError) as e: 
        print('Connection Error: ' + e) 

请您参考如下方法:

以并行方式运行 websocket 客户端的最简单方法是利用 Python 库 Gevent .

这将使您能够并行运行您的客户端,而无需触及您现有的代码(太多)。您只需要管理 Greenlets(某种线程,但更安全、更易于处理,强烈推荐用于 IO 操作)。