Я пытаюсь использовать asyncio lib для того, чтобы мой код делал 3 HTTP-запроса GET / POST «одновременно», чтобы получить ответы как можно быстрее.(Иногда один или другой запрос задерживается, что приводит к задержке следующего.)
Итак, я пошел в asyncio docs и нашел этот пример: https://docs.python.org/3/library/asyncio-task.html#coroutines
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())
Я на самом деле адаптировался под себя, но, похоже, это совсем не помогло, просто сделал код более сложным без каких-либо преимуществ.
При тестировании примера кода (см. Выше) Я предположил, что если я увеличу время задержки для первого say_after()
, сначала будет напечатана вторая :
await say_after(5, 'hello') #5 seconds of sleep before print
await say_after(2, 'world')
Однако это не так.Возвращение было:
началось в 16: 04: 30
привет
world
закончено в 16: 04: 37
Так какова цель этого асинхронного кода? Я мог бы получить тот же результат без асинхронного:
def say_after_b(delay, what):
time.sleep(delay)
print(what)
def main_b():
print(f"started at {time.strftime('%X')}")
say_after_b(5, 'hello')
say_after_b(2, 'world')
print(f"finished at {time.strftime('%X')}")
main_b()
return:
началось в 16: 04: 37
привет
world
закончено в 16: 04: 44
То, как я это вижуасинхронный код с увеличенным временем должен был выглядеть следующим образом:
сон 1 сек> сон 2 сек> печать («мир»)> сон 3 сек> сон 4 сек> сон 5 сек> печать ('привет')> Конец.
Мое предположение неверно?