Python 尝试连接到过多WebSocket时出错
因此,我的代码尝试同时发送300个GET请求,然后连接到300个WebSocket。它可以处理3+个websockets/GET请求,但一旦进入高位,就会输出一个错误。此外,GET请求不是异步完成的,只有在它们全部发送后才会出现错误 这就是错误: [……] 文件“/usr/local/ceral/python/3.7.1/Frameworks/python.framework/Versions/3.7/lib/python3.7/socket.py”,第748行,位于getaddrinfo中 对于_socket.getaddrinfo(主机、端口、系列、类型、协议、标志)中的res: socket.gaierror:[Errno 8]提供了节点名或服务名,或者未知 代码如下:Python 尝试连接到过多WebSocket时出错,python,websocket,request,async-await,python-asyncio,Python,Websocket,Request,Async Await,Python Asyncio,因此,我的代码尝试同时发送300个GET请求,然后连接到300个WebSocket。它可以处理3+个websockets/GET请求,但一旦进入高位,就会输出一个错误。此外,GET请求不是异步完成的,只有在它们全部发送后才会出现错误 这就是错误: [……] 文件“/usr/local/ceral/python/3.7.1/Frameworks/python.framework/Versions/3.7/lib/python3.7/socket.py”,第748行,位于getaddrinfo中 对
import websockets
import requests
import asyncio
async def get_order_book(symbol):
r = requests.get(url='https://api.binance.com/api/v1/depth',
params={'symbol': symbol, 'limit': 20})
r2 = requests.get(url='https://api.binance.com/api/v1/aggTrades',
params={'symbol': symbol, 'limit': 1})
obdata = r.json()
trdata = r2.json()
print(symbol)
ws_url = 'wss://stream.binance.com:9443/ws/' + lc_symbol + '@depth/' + lc_symbol + '@aggTrade'
websocket = await websockets.connect(ws_url)
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())
知道为什么会这样吗
谢谢 您的代码对我来说可以正常工作,没有错误。请求是同步的,这就是为什么代码是同步运行的——在WebSocket等待之前,get_order_book不会放弃控制权 如果需要异步请求,请参阅以下答案: 要将请求(或任何其他阻塞库)与asyncio一起使用,可以使用BaseEventLoop.run_in_executor在另一个线程中运行函数,并从中产生结果
似乎是因为身处一个互联网连通性较低的特定国家而导致了这个问题。谢谢你的帮助!