Skip to content
This repository was archived by the owner on Jun 13, 2024. It is now read-only.

RedGuys/testtask2

Repository files navigation

Тестовое задание 2

Задание

Дан текстовый файл объемом более 1 ГБ. Каждая строчка в нем содержит до 50 символов. Необходимо отсортировать строки из этого файла, используя многопоточность. Результат вывести в файл одного из трех форматов: json, xml, txt. Вывод итогового файла нужно сделать используя механизм наследования классов. Ограничение по памяти: 200 мб. Направление сортировки, формат вывода и имя входного файла задаются через командную строку (Linux).

Решение

Для управления потоками используется ThreadPoolExecutor, который использует по умолчанию 10 потоков (тестировал на 12 поточной системе). Строки читаются их входного файла небольшими чанками и уходят в тредпул на сортировку в рамках чанка и запись во временные файлы. Когда весь файл прочитан, ожидается завершение всех потоков и происходит чтение первой строки из каждого файла и запись его вместе с ридером этого файла в приоритетную очередь. Далее из приоритетной очереди выбирая нужную строку согласно выбранной сортировке, строка записывается в итоговый файл, после чего на ее место записывается следующая строка из файла, из которого была взята предыдущая строка.

Для генерации тестового файла с данными есть класс GenerateData, создающий файл data.txt со средним размером в 1.5 ГБ.

Входные аргументы

  • -i, --input - путь к входному файлу
  • -f, --format - формат вывода (json, xml, txt)
  • -s, --sorting - направление сортировки (asc, desc)
  • -o, --output - путь к выходному файлу

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages