Уведомления

Группа в Telegram: @pythonsu

#1 Март 31, 2011 13:07:59

Cykooz
От:
Зарегистрирован: 2010-10-07
Сообщения: 46
Репутация: +  0  -
Профиль   Отправить e-mail  

Рекурсивный поиск зависимостей в z3c.autioinclude

Вот на этой страничке https://bugs.launchpad.net/grok/+bug/713683/comments/1, в конце, написано, что z3c.autoinclude выполняет рекурсивный поиск зависимостей (т.е. находит зависимости зависимостей и т.д.). Но у меня на практике почему то этого не происходит. Посмотрев код z3c.autoinclude я не обнаружил там какой либо рекурсии. Если нет рекурсивного поиска, то пользы от этого пакета становится в два раза меньше, т.к. придётся либо отказаться от него и подключать все нужные zcml ручками, либо прописывать в зависимостях основного приложения абсолютно все зависимости.
Может я ошибаюсь насчёт отсутствия рекурсивного поиска и он всё таки есть в z3c.autoinclude, но почему тогда у меня он не работает?



Офлайн

#2 Апрель 1, 2011 16:35:32

Cykooz
От:
Зарегистрирован: 2010-10-07
Сообщения: 46
Репутация: +  0  -
Профиль   Отправить e-mail  

Рекурсивный поиск зависимостей в z3c.autioinclude

Нашёл в сырной лавке пакет tl.eggdeps, который умеет рекурсивно находить все зависимости.
Попробую препарировать его и сделать свой форк z3c.autoinclude.



Офлайн

#3 Апрель 2, 2011 22:25:53

astoon
От:
Зарегистрирован: 2007-04-09
Сообщения: 335
Репутация: +  2  -
Профиль   Отправить e-mail  

Рекурсивный поиск зависимостей в z3c.autioinclude

z3c.autoinclude сильно увеличивает время старта. Cykooz, ты случаем не видел в нем, почему так и можно ли это исправить? По этой причине я в свое время отказался от его использования…



Офлайн

#4 Апрель 2, 2011 23:57:03

Cykooz
От:
Зарегистрирован: 2010-10-07
Сообщения: 46
Репутация: +  0  -
Профиль   Отправить e-mail  

Рекурсивный поиск зависимостей в z3c.autioinclude

astoon
ты случаем не видел в нем, почему так и можно ли это исправить
Видел. Там самая медленная функция - это поиск по текстовому названию модуля его дистрибутива (egg).
Исправить можно. Например сделав кеширование всех инклудов в файл auto_configure.zcml. В коментариях (или отдельном файле) сохранять информацию для отслеживания изменений в пакетах, думаю в случае с билдаутом достаточно будет использовать для этого содержимое sys.path и список прямых зависимостей.
Для начала прикручу рекурсивный поиск зависимостей. Если всё будет нормально, то займусь кешированием.

Кстати, насчёт той ссылки из начала темы, дело в том, что z3c.autoinclude используется в Grok из коробки. Но там, как я понял, принято в конфиги всех модулей вставлять автоматическое подключение зависимостей. Поэтому видимо у Uli Fouquet и сложилось мнение, что z3c.autoinclude делает рекурсивный поиск.



Отредактировано (Апрель 4, 2011 09:29:28)

Офлайн

#5 Апрель 3, 2011 00:06:40

Cykooz
От:
Зарегистрирован: 2010-10-07
Сообщения: 46
Репутация: +  0  -
Профиль   Отправить e-mail  

Рекурсивный поиск зависимостей в z3c.autioinclude

Есть ещё одна идея для замены z3c.autoinclude - рецепт для билдаута, который создаёт zcml с инклудами зависимостей. Но это это я пока оставлю как идею. Надо проект делать, некогда плодить похожие сущности.



Офлайн

#6 Апрель 4, 2011 09:50:38

Cykooz
От:
Зарегистрирован: 2010-10-07
Сообщения: 46
Репутация: +  0  -
Профиль   Отправить e-mail  

Рекурсивный поиск зависимостей в z3c.autioinclude

Поизучал tl.eggdeps - надо сказать он находит все зависимости практически мгновенно. При такой скорости возможно даже не понадобится кеширование для z3c.autoinclude.



Офлайн

#7 Апрель 4, 2011 12:47:20

Cykooz
От:
Зарегистрирован: 2010-10-07
Сообщения: 46
Репутация: +  0  -
Профиль   Отправить e-mail  

Рекурсивный поиск зависимостей в z3c.autioinclude

Закопавшись в проблему по уши я понял, что в данный момент не знаю как ускорить работу модуля z3c.autoinclude без использования кеширования. Т.к. основные тормоза заключаются в поиске правильного дистрибутива (с учётом наличия namespace-ов) для объекта типа module.
Функция поиска вызывается один раз для того, что бы получить дистрибутив модуля указанного в zcml директиве includeDependencies. Но и этого одного раза вполне достаточно, что бы замедлить запуск приложения.



Офлайн

#8 Апрель 5, 2011 08:49:34

Cykooz
От:
Зарегистрирован: 2010-10-07
Сообщения: 46
Репутация: +  0  -
Профиль   Отправить e-mail  

Рекурсивный поиск зависимостей в z3c.autioinclude

В общем я запилил рекурсивный поиск зависимостей и добавил атрибут ignore для указания списка пакетов, конфиги которых не надо подключать. Пример использования:

<includeDependencies
package="."
recursive="True"
ignore="zope.app.zcmlfiles ice.control"
/>
Стоит отметить, что ignore позволяет исключить конфиги только указанных пакетов, но не их зависимостей.
Если кому то интересно то код можно слить тут:
https://bitbucket.org/cykooz/z3c.autoinclude



Офлайн

#9 Апрель 5, 2011 21:27:57

astoon
От:
Зарегистрирован: 2007-04-09
Сообщения: 335
Репутация: +  2  -
Профиль   Отправить e-mail  

Рекурсивный поиск зависимостей в z3c.autioinclude

Круто. В англоязычной рассылке скинуть бы тоже надо инфу.



Офлайн

#10 Апрель 6, 2011 08:43:52

Cykooz
От:
Зарегистрирован: 2010-10-07
Сообщения: 46
Репутация: +  0  -
Профиль   Отправить e-mail  

Рекурсивный поиск зависимостей в z3c.autioinclude

Судя по TODO, автор пакета и сам хотел сделать рекурсивный поиск, но как я понял в виде какой то отдельной директивы.
Попробую запостить сообщение в zope-dev, надеюсь там поймут мой недоанглийский.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version