@Xymis

Как реализовать асинхронный клиент с двумя корутинами?

Здравствуйте!
Никак не получается реализовать следующую задумку:
Есть две корутины
1. Ждет сообщения от сервера и печатает ответ

async def handler(ws):
        response = await ws.recv()
        print(response)


2. Пингует сервер раз в 3 секунды

async def ping(ws):
        await asyncio.sleep(3)
        await ws.send(b'ping')


async def main():

    loop = asyncio.new_event_loop()

    async with websockets.connect('ws://127.0.0.1:8080/ws') as ws:
        await ws.send('hello'.encode())

        while True:
            await handler(ws)
            await ping(ws)

asyncio.run(main())


Проблема реализации в том, что ping берет весь контроль, и когда я отправляю сообщения handler их не обрабатывает до завершения asyncio.sleep внутри ping

Подскажите, как правильно реализовать такую логику. Заранее спасибо!
  • Вопрос задан
  • 60 просмотров
Решения вопроса 1
sergey-gornostaev
@sergey-gornostaev Куратор тега Python
Седой и строгий
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы