Я пытаюсь создать оболочку api для API веб-сокета. Моя библиотека должна позволять непрерывно прослушивать этот API веб-сокета, не блокируя программу. Я использую asyncio.
Вот как выглядит содержимое моего класса DataStream:
async def connect(self):
self.request_id = 0
asyncio.create_task(self.start_session())
while not self.enabled:
await asyncio.sleep(1)
async def start_session(self):
async with aiohttp.ClientSession() as session:
self.web_socket = await session.ws_connect(self.endpoint)
self.enabled = True
await self._handle_connection()
async def _handle_connection(self):
while True:
print("looped!")
msg = await self.web_socket.receive()
print("test")
Внутри моего класса Client у меня есть:
async def load_market(self):
self.market = MarketDataStream(self, f"{self.endpoint}/market", self.user_agent)
await self.market.connect()
И мой код:
async def main(loop):
config = Config("config.toml", "config.template.toml")
client = cryptocom.Client(config.api_key, config.api_secret)
await client.load_market()
print("market endpoints loaded!")
Программа печатает "зацикленный!" и "Market endpoints loaded!", что означает, что msg = await self.web_socket.receive()
не работает, а мой l oop только l oop один раз. Затем моя программа завершается.
Вот мой полный исходный код: https://github.com/Th0rgal/crypto.com
Спасибо, Томас