4 года назад
История
README.md
Тестовое задание от кадрового центра “Дока”
Текст задания
- Написать программу на Python, которая делает следующие действия:
- Создает 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>
- Обрабатывает директорию с полученными 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]
Аргументы для запуска
- Два обязательных числовых аргумента:
- [int] - Количество zip файлов
- [int] - Количество xml файлов
- Необязательный флаг
-s
или--slow
для запуска версии без оптимизации второй части задания
Порядок выполнения
- Разработка кода для выполнения задания без оптимизации
Результат по времени для 50 zip с 100 xml:
- запись zip файлов, сек.: 1.2176902294158936
- чтение и агрегация данных из zip файлов, сек: 0.6824955940246582
- общее время, сек: 1.900313377380371
- Оптимизация кода чтения zip файлов с использованием futures multiprocessing
Результат по времени для 50 zip с 100 xml на 4х ядрах:
- запись zip, файлов (не оптимизировал), сек: 1.2300291061401367
- чтение и агрегация данных из zip файлов, сек: 0.21239161491394043
- общее время выполнения, сек: 1.442502737045288
Конвейеры
0 успешных
0 с ошибкой