Затраты на вызов get_event_loop () - PullRequest
0 голосов
/ 09 октября 2018

Я спорю, включать ли строку loop = asyncio.get_event_loop() один раз в файл или писать loop = asyncio.get_event_loop() каждый раз, когда мне нужен дескриптор в цикле событий, поэтому несколько раз по всему файлу внутри различных методов, которые нужны для создания задач.

Мой коллега утверждает, что глобальные перемены вне класса - плохой стиль.Но я не в восторге от того, чтобы тратить циклы ЦП из-за небольшого количества накладных расходов на этот метод get_event_loop, а также просто из-за дополнительной строки кода в каждом методе.

Какой способ лучше?

Ответы [ 2 ]

0 голосов
/ 10 октября 2018

В Python 3.7 амортизированное время вызова get_event_loop(), если оно едва сопоставимо со временем вызова функции C и намного быстрее, чем время вызова функции Python .

Для Python 3.6 эта функция немного медленнее, но все же не является узким местом для любого ставимого пользователем кода пользователя.

0 голосов
/ 09 октября 2018

Если вы на самом деле не можете доказать, что накладные расходы на get_event_loop оказывают негативное влияние на ваше приложение, я бы посоветовал не проводить такую ​​микрооптимизацию.Использование get_event_loop гарантирует, что ваш код будет выполняться в нескольких циклах событий, которые регулярно создаются при помощи тестовых наборов или при нескольких вызовах asyncio.run.

Если вы абсолютно уверены, что должны оптимизироватьОтмените вызов get_event_loop, хотя бы создайте класс и сохраните его в экземпляре во время создания.Таким образом, вы получаете преимущество, избегая вызова функции, в то время как ваш код остается работоспособным при нескольких циклах событий, по крайней мере, до тех пор, пока ваши объекты разработаны так, чтобы не пережить цикл событий.

...