我遇到了与python websockets的github问题相同的问题:

不过,提议的解决方案对我不起作用.我得到的错误是:

网袋.例外.ConnectionClosed:WebSocket连接已关闭:code=1006(连接异常关闭[内部]),无原因

这是我的代码:

async def get_order_book(symbol):
    with open('test.csv', 'a+') as csvfile:
        csvw = csv.writer(csvfile, delimiter=',', quotechar='|', quoting=csv.QUOTE_MINIMAL)
        DT = Data(data=data, last_OB_id=ob_id, last_TR_id=tr_id, sz=10, csvw=csvw)

        while True:
            if not websocket.open:
                print('Reconnecting')
                websocket = await websockets.connect(ws_url)
            else:
                resp = await websocket.recv()
                update = ujson.loads(resp)
                DT.update_data(update)

async def get_order_books():
    r = requests.get(url='https://api.binance.com/api/v1/ticker/24hr')
    await asyncio.gather(*[get_order_book(data['symbol']) for data in r.json()])

if __name__ == '__main__':
    asyncio.run(get_order_books())

我测试它的方法是关闭我的互联网连接,但经过10秒的延迟后,它仍然返回1006错误.

我正在运行Python 3.7和Websockets 7.0.

让我知道你的 idea ,谢谢!

推荐答案

所以我找到了解决办法:

当连接关闭时,出于某种原因,它会中断while循环.所以为了保持websocket运行,你必须包围它

resp = await websocket.recv()

用try...除了,还有

print('Reconnecting')
websocket = await websockets.connect(ws_url)

在异常处理部分.

Python-3.x相关问答推荐

如何在Django中创建两个不同权限的用户?

Python:字典和列表:在列表字典中搜索子列表的有效方法

是什么原因导致Pandas=2.1.4和Pandas=1.4.2之间Pandas DataFrame中从Float64到int32的连续列转换方式不同

Python多处理池:缺少一个进程

如何使用Python将嵌套的XML转换为CSV

谁能解释一下这个带邮编的多功能环路?

按长度和字母数字对Pandas 数据帧列进行排序

查找值始终为零的行 pandas

错误:无法为 pyconcorde 构建轮子,这是安装基于 pyproject.toml 的项目所必需的

如何立即从asyncio.Task获取异常?

pytorch 中 mps 设备的 manual_seed

判断 gekko 中的表达式

SqlAlchemy - 从 oracle db 中检索长文本

获取以特定字母开头的姓氏

为什么 Python 枚举中的可变值是同一个对象?

asyncio.Semaphore RuntimeError: Task got Future 附加到不同的循环

如何使 Python3 成为 Geany 中的默认 Python

接收导入错误:没有名为 *** 的模块,但有 __init__.py

如何删除目录? os.removedirs 和 os.rmdir 是否只用于删除空目录?

十六进制字符串到 Python 3.2 中的带符号整数?