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

标签 python performance sockets websocket io

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

目前,我正在使用 python 同步 Web 套接字库 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 操作)。

关于python - 从 WebSocket 提取数据的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48293456/

相关文章:

python - 需要一个类似字节的对象,而不是 'str' - 错误

php - 我应该调用一个包含 SESSION 值的变量而不是在 PHP 中调用实际 session 吗?

java - GWT优化

android - Android Wifi P2P : failed to connect to/192. 168.49.1(端口1080):isConnected失败:ECONNREFUSED(连接被拒绝)

python - 仅在可用时在 python 套接字中接收数据

python - 使用多个解析创建 Scrapy 项目数组

python - 重复numpy数组而不复制数据

node.js - 文件较小的 node.js HTTP 服务器响应速度慢得多

python - PyMySQL 不是从 Cron 连接,而是从控制台连接

python - 填充 Python 字典