aiohttp и asyncio, как получить ответ от http-запроса и websocket одновременно?

Попробуйте использовать рекурсию:

Я считаю, что вы ищете что-то вроде этого:

from random import randint as ri
MAX_DICE_NUMBER = 20
def roll_dice():
    attempt = ri(1, MAX_DICE_NUMBER)
    if attempt == MAX_DICE_NUMBER:
        return attempt + roll_dice()
    else:
        return attempt

def action_roll_script(attribute):
    print("You got a " + attribute + " roll of " + str(roll_dice()) + "!")

action_roll_script('power')
>>> You got a power roll of 16!

Я не понимал, зачем вам нужен счет, хотя ...

Но этот фрагмент все еще может быть полезен :)

2
задан ChzChz 18 January 2019 в 22:36
поделиться

1 ответ

Этот код сериализует возвращаемые значения HTTP и связи через веб-сокет:

while True:
    some_data_from_get_request = await get_some_data(session)
    msg_from_websocket = await ws.receive()

Чтобы можно было обнаружить возврат любой из двух сопрограмм, вы можете использовать asyncio.wait(..., return_when=asyncio.FIRST_COMPLETED):

http_fut = asyncio.ensure_future(get_some_data(session))
ws_fut = asyncio.ensure_future(ws.receive())
pending = {http_fut, ws_fut}
while pending:
    _done, pending = asyncio.wait(pending, return_when=asyncio.FIRST_COMPLETED)
    if http_fut.done():
        some_data_from_get_request = http_fut.result()
        ...
    if ws_fut.done():
        msg_from_websocket = ws_fut.result()
        ...
0
ответ дан user4815162342 18 January 2019 в 22:36
поделиться
Другие вопросы по тегам:

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