как можно вставить в асинхронный цикл код, чтобы он работал по времени

robisho

Активный пользователь
Пользователь
Окт 19, 2020
151
26
28
Добрый день. Задача такая: есть асинхронная фунция, в которой идет работа с websocket. Сначала рукопожатие, потом отправка необходимых данных. В цикле осуществляется ожидание данных. Но для сохранения коннекта нужно посылать каждые 5 сек пинг вне зависимости от прихода данных. Т.е. в основном цикле должен быть еще один безконечный цикл, в котором через 5 сек будет посылаться пинг и этот вложенный цикл должен жить отдельной жизнью от основного цикла. Подскажите, пожалуйста, как это можно сделать? Спасибо.
Python:
async def run_websockets():
    uri = "wss://site.ru/socket.io/?EIO=3&transport=websocket"
    async with websockets.connect(uri, subprotocols=["websocket"], extra_headers=extra_headers) as ws:
        print('--- init ---')
        greeting = await ws.recv()
        print(f'greeting >>> {greeting}')
        print('=== greeting ===')
        message = await ws.recv()
        print(f'message >>> {message}')
        await ws.send("broadcast1")
        await ws.send("observer2")
        message = await ws.recv()
        print(f'message >>> {message}')
        # в этом цикле необходимо реализовать идею с пингом
        while True:
            try:
                message = await ws.recv()
                print(f'message1 >>> {message}')
                print('---+++---')
            except websockets.exceptions.ConnectionClosedError:
                print('*** ConnectionClosedError ***')

P.S. print добавлены исключительно для визуализации.
 

Форум IT Специалистов