Понимание asyncio с длительными вычислениями в Python ⇐ Python
Понимание asyncio с длительными вычислениями в Python
Сейчас я работаю с библиотекой asyncio Python и сталкиваюсь с некоторым поведением, которое не до конца понимаю. Мой код включает в себя две асинхронные функции: f1, выполняющую длительные вычисления, и f2, простую функцию с коротким периодом ожидания. Вот код:
импортировать asyncio время импорта асинхронная защита f1(): печать("начало f1") пока правда: печать("f1 1") дождитесь asyncio.sleep(0) начало = время.время() [3**100 для _ в диапазоне (8000000)] print("f1 2 прошедшее время: ", time.time() - старт) асинхронная защита f2(): печать("начало f2") ждать asyncio.sleep(0.01) печать("конец f2") асинхронное определение main(): задачи = [ f1(), f2(), ] ожидайте asyncio.gather(*задачи) если __name__ == "__main__": asyncio.run(main()) Я ожидал, что f2 выполнится и быстро завершится после 0,01-секундного сна, даже когда f1 выполняет свои вычисления. Однако результат, который я вижу:
f1 старт f1 1 f2 старт f1 2 прошедшее время: 4.705456018447876 f1 1 f1 2 прошедшее время: 4.23239803314209 f1 1 f1 2 прошедшее время: 4.644515037536621 f1 1 конец f2 f1 2 прошедшее время: 4.337735891342163 f1 1 Похоже, что f2 завершается только после нескольких итераций вычислений f1. Насколько я понимаю, await asyncio.sleep(0) в f1 позволит f2 работать своим чередом, но, похоже, это происходит не так, как ожидалось. Может ли кто-нибудь объяснить, почему f2 не завершается до тех пор, пока не пройдет несколько итераций f1?
Сейчас я работаю с библиотекой asyncio Python и сталкиваюсь с некоторым поведением, которое не до конца понимаю. Мой код включает в себя две асинхронные функции: f1, выполняющую длительные вычисления, и f2, простую функцию с коротким периодом ожидания. Вот код:
импортировать asyncio время импорта асинхронная защита f1(): печать("начало f1") пока правда: печать("f1 1") дождитесь asyncio.sleep(0) начало = время.время() [3**100 для _ в диапазоне (8000000)] print("f1 2 прошедшее время: ", time.time() - старт) асинхронная защита f2(): печать("начало f2") ждать asyncio.sleep(0.01) печать("конец f2") асинхронное определение main(): задачи = [ f1(), f2(), ] ожидайте asyncio.gather(*задачи) если __name__ == "__main__": asyncio.run(main()) Я ожидал, что f2 выполнится и быстро завершится после 0,01-секундного сна, даже когда f1 выполняет свои вычисления. Однако результат, который я вижу:
f1 старт f1 1 f2 старт f1 2 прошедшее время: 4.705456018447876 f1 1 f1 2 прошедшее время: 4.23239803314209 f1 1 f1 2 прошедшее время: 4.644515037536621 f1 1 конец f2 f1 2 прошедшее время: 4.337735891342163 f1 1 Похоже, что f2 завершается только после нескольких итераций вычислений f1. Насколько я понимаю, await asyncio.sleep(0) в f1 позволит f2 работать своим чередом, но, похоже, это происходит не так, как ожидалось. Может ли кто-нибудь объяснить, почему f2 не завершается до тех пор, пока не пройдет несколько итераций f1?
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Asyncio Async Funcitons вешает с Asyncio.gather. (Код работает без Asyncio.gather)
Anonymous » » в форуме Python - 0 Ответы
- 22 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Почему Python невероятно странно справляется с вычислениями мнимых чисел?
Anonymous » » в форуме Python - 0 Ответы
- 15 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Почему Python невероятно странно справляется с вычислениями мнимых чисел?
Anonymous » » в форуме Python - 0 Ответы
- 12 Просмотры
-
Последнее сообщение Anonymous
-