0
我試圖發送多個消息到websocket服務器異步。 代碼我使用(簡稱爲清楚起見):aiohttp ws_response協同程序
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))
驅動腳本:
from bitfinex import Bitfinex
async def main():
session = aiohttp.ClientSession()
try:
# Duplicate objects just for testing purposes
collectors = [
Bitfinex(session),
Bitfinex(session)
]
# Subscribe to orderbook channels.
subscriptions = [
col.subscribe()
for col in collectors
]
await asyncio.wait(subscriptions)
finally:
session.close()
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
ws_conn對象的正確初始化,應根據aiohttp文檔async with session.ws_connect(ws_url) as ws_conn:
。該聲明返回ws_conn
作爲ClientWebSocketResponse
對象。我試圖初始化ws_conn
沒有上下文管理器,並得到_WSRequestContextManager
類型,而沒有send_json()
方法。如何在沒有上下文管理器的情況下獲得適當的對象,並且不需要直接初始化?