@kokapuk

В чем разница конструкций?

import asyncio
import time

async def say_after(delay, what):
    await asyncio.sleep(delay)
    print(what)

async def main():
    print(f"started at {time.strftime('%X')}")

    await say_after(1, 'hello')
    await say_after(2, 'world')

    print(f"finished at {time.strftime('%X')}")

asyncio.run(main())

---------------------------------------------------
import time

def say_after(delay, what):
    time.sleep(delay)
    print(what)

def main():
    print(f"started at {time.strftime('%X')}")

    say_after(1, 'hello')
    say_after(2, 'world')

    print(f"finished at {time.strftime('%X')}")

main()

Код выше я взял из официальной документации по питону, я не могу понять смысл этой конструкции, потому что например в том же си шарпе в async методе можно было через await запустить метод, который никак не блокировал выполнение остального когда.
  • Вопрос задан
  • 134 просмотра
Решения вопроса 2
@deliro
Не знаю, что там у вас в "си шарпе", но вот отрывок из официальной документации "си шарпа":

The await operator suspends evaluation of the enclosing async method until the asynchronous operation represented by its operand completes.


То есть, как и во всех языках (в т.ч. питоне) await suspends evaluation of the enclosing async method и дожидается завершения корутины
Ответ написан
Vindicar
@Vindicar
RTFM!
async def main():
    print(f"started at {time.strftime('%X')}")
    # вызов займёт 2 секунды, а не 3
    await asyncio.gather(say_after(1, 'hello'), say_after(2, 'world')) 
    print(f"finished at {time.strftime('%X')}")


В синхронном коде такое можно имитировать только потоками.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы