издание на системата за управление на пакети , използвани в разпространението . Представената тема обобщи дългосрочната работа по прехода към Python 3 и края на поддръжката за Python 2.7.
Освен края на поддръжката за Python 2.7, друга важна промяна беше включването на , което позволи да се ускорят изчисленията, свързани с определянето на зависимости с 50-60%. Интересното е, че някои разработчици предложиха пренаписване на кода за разрешаване на зависимости в C/C++ или Go, за да се ускори работата му, но успяха да разрешат съществуващия проблем с малко усилия.
Профилирането на съществуващия код показа, че по-голямата част от времето за изчисление е изразходвано за извикване на функциите use_reduce и catpkgsplit с повтарящ се набор от аргументи (например функцията catpkgsplit е извикана от 1 до 5 милиона пъти). За да се ускорят нещата, беше използвано кеширане на резултатите от тези функции с помощта на речници. Най-добрият вариант за съхранение на кеша беше вградената функция lru_cache, но тя беше налична само в версии на Python, започващи с 3.2. За съвместимост с по-ранни версии беше добавен пън, който да замени lru_cache, но решението да се прекрати поддръжката на Python 2.7 в Portage 3.0 значително опрости задачата и направи възможно да се направи без този слой.
Използването на кеша намали времето за изпълнение на операцията „emerge -uDvpU —with-bdeps=y @world“ на лаптопа ThinkPad X220 от 5 минути 20 секунди на 3 минути 16 секунди (63%). Тестовете на други системи показаха увеличение на производителността от поне 48%.
Разработчикът, подготвил промяната, също се опита да внедри прототип на кода за разрешаване на зависимости в C++ или Rust, но задачата беше твърде трудна, защото изискваше пренасяне на голямо количество код и беше съмнително, че резултатът ще си струва усилието .
Източник: opennet.ru
