WedX - журнал о программировании и компьютерных науках

Отдельные папки кеша для Ivy

Я хочу раскрыть всю мощь параллелизма, запустив некоторые связанные с Ivy задачи Ant на локальном Bamboo. агенты. Наша машина Bamboo оснащена мощным процессором и оперативной памятью.

Если я разделю свою задачу сборки на параллельные задания, каждое из которых будет создавать разные артефакты на основе результата ivy-retrieve, я решу свою проблему в теории.

На практике, к сожалению, если две задачи Ant по какой-то причине выполняются одновременно на одной машине и в одной и той же организации-артефакте, они будут конфликтовать, и одна из них получит ошибку XML.

У меня нет точного сообщения об ошибке, потому что 1) проблема случайна для воспроизведения и 2) я уже проделал большую работу, чтобы поместить все задания в последовательное. Но у меня есть четкое представление о том, что происходит.

Когда Ant запускает ivy-retrieve, приведенный ниже код, он будет использовать локальный каталог кеша пользователя, который оказывается /home/bamboo/.ivy2/cache. Там я могу найти множество resolved-[org]-[artifact]-[version].xml файлов (каждый из которых представляет собой другую версию сборки моего проекта). Проблема возникает, когда я хочу запустить задачу ivy-retrieve дважды, например, одну для конфигурации compile, а другую для runtime. Два XML-файла будут конфликтовать, и Ivy сообщит об ошибке SAX при чтении одного из файлов, потому что он выглядит так, как будто он записывается в данный момент.

Если я запускаю задание на удаленных агентах, я не ожидаю проблем, но у меня уже есть 5 локальных агентов, и Bamboo не будет запускать удаленных агентов, если локальные агенты свободны.

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

Вопрос в том

Можно ли указать Ivy, работающему на агенте Bamboo, использовать временный уникальный каталог кеша для работы с файлами dependencies.xml, а не использовать глобальный кеш? Или максимум синхронизировать доступ к файлам?

Во втором варианте параллельный процесс Ant может читать и записывать кэшированный файл dependencies.xml исключительно на взаимной основе. Так что то, что они читают, всегда будет согласованным файлом (будучи одним и тем же файлом, мне все равно, перезапишет ли процесс другой)


Ответы:


1

У Ivy есть 2 кеша — кеш репозитория и кеш разрешения. Второй перезаписывается при каждом разрешении и никогда не должен использоваться несколькими процессами одновременно.

  1. Установите переменную среды, указывающую на временный каталог в вашем агенте bamboo.
  2. Создайте отдельный файл ivysettings.xml для своего проекта.
  3. Используйте переменную среды в файле ivysettings.xml проекта, чтобы настроить каталог кеша.

Вот пример ivysettings.xml:

<ivysettings>
  <properties environment="env" />
  <caches resolutionCacheDir="${env.TEMP_RESOLUTION_CACHE}" />

  <settings defaultResolver="local" />

  <statuses default="development">
    <status name="release" integration="false"/>
    <status name="integration" integration="true"/>
    <status name="development" integration="true"/>
  </statuses>

  ...    

</ivysettings>

Или вы можете попробовать стратегию блокировки. Я не пробовал.

17.02.2016
Новые материалы

Объяснение документов 02: BERT
BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

Как проанализировать работу вашего классификатора?
Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

Работа с цепями Маркова, часть 4 (Машинное обучение)
Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

Учебные заметки: создание моего первого пакета Node.js
Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..


Для любых предложений по сайту: [email protected]