aiohttp ws_响应协同程序

2021-01-17 15:15:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试将多条消息异步发送到websocket服务器。 我使用的代码(为清晰起见,请缩短):

class Bitfinex(object):

    def __init__(self, session):
        self.ws_conn = session.ws_connect(self.WS_URL)

    async def subscribe(self):
        tasks = [
            self.ws_conn.send_json(self.SUB_MESG.update({'prec': self.PREC_MAP[pair], 'pair': pair}))
            for pair in self.PAIRS
        ]
        await asyncio.wait(tasks)
        res = self.ws_conn.receive()
        self.logger.debug('Subscribe result: {}'.format(res.data))

驱动程序脚本:

^{pr2}$

ws_conn对象的正确初始化应符合aiohttp文档async with session.ws_connect(ws_url) as ws_conn:。该语句将ws_conn作为ClientWebSocketResponse对象返回。我试图在没有上下文管理器的情况下初始化ws_conn,但是得到了没有send_json()方法的_WSRequestContextManager类型。在没有上下文管理器和直接ClientWebSocketResponse初始化的情况下,如何获得正确的对象?在

1条回答
网友
1楼 ·

ws_connect是一个协程,因此您需要等待它的结果

self.ws_conn = await session.ws_connect(self.WS_URL)

但是不能在协程之外使用await表达式,因此需要将其从__init__方法中移动

相关问题