Python: использовать модуль asyncio для ожидания результата для 2 независимых задач - PullRequest
0 голосов
/ 03 марта 2020

Для Python 3.4+ я могу использовать asyncio для отправки независимых задач. enter image description here

Теперь у меня есть две длительные независимые функции. Обе функции возвращают результат, так как мне собрать два результата в один объект, используя asyncio, чтобы поместить эти две функции в IO l oop.

import asyncio 

async def long_func1():
   await ...
   ...

async def long_func2():
   await ...
   ...

1 Ответ

0 голосов
/ 18 марта 2020

Если я получаю то, что вы пытаетесь сделать ...

Чтобы запустить обе функции одновременно, вы можете использовать asyncio.create_task и asyncio.wait для результатов их.

Посмотрите на следующий пример:

import sys
import asyncio

async def test_1():
    return sys._getframe().f_code.co_name

async def test_2():
    return sys._getframe().f_code.co_name


async def main():
    t1 = asyncio.create_task(test_1())
    t2 = asyncio.create_task(test_2())

    done, pending = await asyncio.wait([t1, t2])
    results = [d.result() for d in done]

    # The order of the finished function is unknown
    print(results)

if __name__ == '__main__':
    loop = asyncio.get_event_loop()
    loop.run_until_complete(main())
    loop.close()

Он будет запускать две функции и будет дождитесь , пока они оба не закончат sh.

Как только они будут done, он соберет результаты обеих функций done в список results.

...