Форум сайта python.su
Добрый день. Задача такая: есть асинхронная фунция, в которой идет работа с websocket. Сначала рукопожатие, потом отправка необходимых данных. В цикле осуществляется ожидание данных. Но для сохранения коннекта нужно посылать каждые 5 сек пинг вне зависимости от прихода данных. Т.е. в основном цикле должен быть еще один безконечный цикл, в котором через 5 сек будет посылаться пинг и этот вложенный цикл должен жить отдельной жизнью от основного цикла. Подскажите, пожалуйста, как это можно сделать? Спасибо.
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: greeting = await ws.recv() print(f'greeting >>> {greeting}') print('=== greeting ===') message = await ws.recv() await ws.send("broadcast1") await ws.send("observer2") message = await ws.recv() # в этом цикле необходимо реализовать идею с пингом while True: try: message = await ws.recv() except websockets.exceptions.ConnectionClosedError: print('*** ConnectionClosedError ***')
Офлайн
Можешь отдельно сделать поток, который будет обособлен от основного цикла и самостоятельно посылать сообщения:
from threading import Thread from time import sleep THREAD_STATUS = True def keepalive(connection): while THREAD_STATUS: connection.send(b"XXX") sleep(5)
# Life loop while alive: if (fun > boredom) and money: pass_day(fun, boredom, money) continue else: break
Офлайн
DamMerculКонечно можно… Но это так не асинхронно!!! Выглядит как скрещивание ужа с ежом.
Можешь отдельно сделать поток, который будет обособлен от основного цикла
Отредактировано doza_and (Май 29, 2022 10:25:57)
Офлайн