@cashncarry
нагуглили

Почему код не работает асинхронно?

Помогите разобраться asyncio.
Есть код:
import nest_asyncio
nest_asyncio.apply()
import time
import asyncio


async def f(n):
    await asyncio.sleep(1)
    for i in range(5000):    
        i**i
    return i


async def asynchronous():
    start = time.time()
    tasks = [asyncio.create_task(f(1)), asyncio.create_task(f(2)), asyncio.create_task(f(3))]
    result = await asyncio.gather(*tasks)
    print("Process took: {:.2f} seconds".format(time.time() - start))
    return result

asyncio.run(asynchronous());


Время выполнения ~4 сек. Одна секунда на слип + по одной на каждый цикл. (вместо 1-2 сек в асинхронной работе)
Почему на код не запускается асинхронно?
  • Вопрос задан
  • 469 просмотров
Решения вопроса 1
sergey-gornostaev
@sergey-gornostaev Куратор тега Python
Седой и строгий
Асинхронность построена на кооперативной многозадачности, чтобы она была эффективной, надо чтобы сопрограммы отдавали управление на блокирующих вызовах. А цикл внутри f не блокируется и не отдаёт управление. Поэтому если выполнение одного прогона цикла требует секунды, то выполнение трёх прогонов будет требовать трёх секунд.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Muxauko
Тогда как же пробежаться по списку асинхронно?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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