README.md

Тестовое задание от кадрового центра “Дока”

Текст задания

- Написать программу на Python, которая делает следующие действия:

  1. Создает 50 zip-архивов, в каждом 100 xml файлов со случайными данными следующей структуры:
    <root>
       <var name=’id’ value=’<случайное уникальное строковое значение>’/>
       <var name=’level’ value=’<случайное число от 1 до 100>’/>
       <objects>
          <object name=’<случайное строковое значение>’/>
          <object name=’<случайное строковое значение>’/>
          # В тэге objects случайное число (от 1 до 10) вложенных тэгов object.
          …
       </objects>
    </root>
  1. Обрабатывает директорию с полученными zip архивами, разбирает вложенные xml файлы и формирует 2 csv файла:
  • Первый: id, level - по одной строке на каждый xml файл
  • Второй: id, object_name - по отдельной строке для каждого тэга object (получится от 1 до 10 строк на каждый xml файл)

Очень желательно сделать так, чтобы задание 2 эффективно использовало ресурсы многоядерного процессора. Также желательно чтобы программа работала быстро.

Установка

В окружении python 3.7+ выполнить:

git clone https://AOwlman@bitbucket.org/AOwlman/doka_ngenix.git
cd ./doka_ngenix
pip install -r requirements.txt

Запуск

python doka.py 50 100 [-s, --slow]

Аргументы для запуска

  1. Два обязательных числовых аргумента:
    • [int] - Количество zip файлов
    • [int] - Количество xml файлов
  2. Необязательный флаг -s или --slow для запуска версии без оптимизации второй части задания

Порядок выполнения

  1. Разработка кода для выполнения задания без оптимизации
    Результат по времени для 50 zip с 100 xml:
    - запись zip файлов, сек.: 1.2176902294158936
    - чтение и агрегация данных из zip файлов, сек: 0.6824955940246582
    - общее время, сек: 1.900313377380371
  1. Оптимизация кода чтения zip файлов с использованием futures multiprocessing
    Результат по времени для 50 zip с 100 xml на 4х ядрах:
    - запись zip, файлов (не оптимизировал), сек: 1.2300291061401367
    - чтение и агрегация данных из zip файлов, сек: 0.21239161491394043
    - общее время выполнения, сек: 1.442502737045288
Конвейеры
0 успешных
0 с ошибкой