Мне нужно прочитать каждый файл в дереве каталогов, начиная с заданного корневого местоположения. Я хотел бы сделать это как можно быстрее, используя параллелизм. У меня есть 48 ядер в моем распоряжении и 1 TB ram, поэтому ресурсы потоков не являются проблемой. Мне также нужно регистрировать каждый файл, который был прочитан.Параллельный каталог walk python
Я посмотрел на использование joblib, но не смог объединить joblib с os.walk.
я могу думать о двух способах:
- ходить по дереву и добавить все файлы в очередь или список и есть уборщица пул потоков DEQUEUE файлов - лучший балансировки нагрузки, может быть, больше времени из-за начальную ходьбу & queue overhead
- порождает потоки и статически назначает части дерева каждому потоку - низкая балансировка нагрузки, отсутствие начальной ходьбы, назначение каталогов на основе какого-либо хэша.
или есть лучший способ?
EDIT Эксплуатационное хранение не является проблемой. Предположим, существует бесконечно быстрое хранилище, которое может обрабатывать бесконечное число параллельных читает
EDIT удален многоузловой ситуации держать фокус на параллельной директории ходьбы
Какое хранилище вы пытаетесь прочитать? Вы упоминаете масштабирование по узлам, поэтому я предполагаю, что мы не просто говорим о типичном HDD/SSD здесь? – dano
Основываясь на комментарии дано, это больше похоже на ограниченную работу с жестким диском, чем на работу с ограниченным процессором. Если вы делаете много потоков, вы, честно говоря, можете запустить * SLOWER *, чем один процессор, так как вы собираетесь заставить многих искать !! – WakkaDojo
Право - узкое место здесь, скорее всего, диск ввода-вывода. Неважно, сколько процессоров вы бросаете на проблему, если ваш диск не поддерживает параллельные чтения. – dano