Использование asyncio в Python - PullRequest
       11

Использование asyncio в Python

0 голосов
/ 22 января 2019

Я только начал изучать asyncio на Python и написал следующий код:

import asyncio
loop = asyncio.get_event_loop()


async def hello():
    print("Hello")
    await asyncio.sleep(3)
    print("World")

if __name__ == '__main__':
    for i in range(3):
        loop.run_until_complete(hello())
    loop.close()

Это дает мне следующий вывод:

Hello
<waits for 3 seconds>
World
Hello
<waits for 3 seconds>
World
Hello
<waits for 3 seconds>
World

Как я могу изменить программу так, чтобы она выполнялась асинхронно (т. Е. После того, как первая задача спит, вторая начинает выполняться), по сути, выдает результат, подобный следующему:

Hello
Hello
Hello
World
World
World

Ответы [ 2 ]

0 голосов
/ 22 января 2019

Я тоже новичок в asyncio, но мне стало любопытно прочитать ваш вопрос и попытаться немного его изучить.Это то, что я получил, что-то отличное от предыдущего ответа, с дополнительной конфетой переменного времени сна;):

import asyncio


async def hello(timeToSleep):
    print("Hello")
    await asyncio.sleep(timeToSleep)
    print("World")

async def main():
    tasks = []
    for i in range(3):
        tasks.append(asyncio.create_task(hello(i)))
    for task in tasks:
        await task

if __name__ == '__main__':
    asyncio.run(main())

0 голосов
/ 22 января 2019

Вы можете asyncio.gather их.

import asyncio


async def hello():
    print("Hello")
    await asyncio.sleep(3)
    print("World")

async def lots_of_hello():
    cur_list = []
    for _ in range(3):
        cur_list.append(hello())
    await asyncio.gather(*cur_list)

if __name__ == '__main__':
    loop = asyncio.get_event_loop()
    loop.run_until_complete(lots_of_hello())
    loop.close()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...