Nano Hash - криптовалюты, майнинг, программирование

multiprocess для разделения одного файла - всегда ли он связан с вводом-выводом?

Я читал аналогичную ветку, в которой OP хотел обработать каждую строку в функции с использованием многопроцессорной обработки (найдено здесь). Ответ на этот интригующий вопрос был следующим:

from multiprocessing import Pool

def process_line(line):
    return "FOO: %s" % line

if __name__ == "__main__":
    pool = Pool(4)
    with open('file.txt') as source_file:
        # chunk the work into batches of 4 lines at a time
        results = pool.map(process_line, source_file, 4)

Мне интересно, можете ли вы сделать то же самое, но вместо того, чтобы возвращать каждую обработанную строку, запишите ее в другой файл.

В основном я хочу посмотреть, есть ли способ MP читать и писать файл, чтобы разделить его по строкам. Скажем, я хочу 100 000 строк в файле.

from multiprocessing import Pool

def write_lines(line):
    #need method to write lines to multiple files, perhaps a Queue?

if __name__ == "__main__":
    #all my procs
    pool = Pool()
    with open('file.txt') as source_file:
        # chunk the work into batches of 4 lines at a time
        results = pool.map(process_line, source_file, 100000)

Я мог бы использовать MP Queue, чтобы разделить файл на отдельные объекты Queue, а затем заполнить каждый процессор заданием по записи всех строк, но мне все равно нужно сначала прочитать файл. Так будет ли он всегда полностью привязан к вводу/выводу и никогда не сможет эффективно работать в режиме MP?


Ответы:


1

Как вы подозревали, эта рабочая нагрузка на самом деле не сильно выиграет (если вообще) от multiprocessing. Все, что вы здесь делаете, это читаете один файл, а затем записываете содержимое этого файла в другие файлы. Это полностью связано с вводом-выводом; узким местом будет скорость чтения и записи на диск. Использование multiprocessing для одновременной записи нескольких файлов на один и тот же диск не ускорит запись, потому что диск может записывать только одну вещь за раз.

Где multiprocessing может помочь, так это в том случае, если у вас есть работа, связанная с процессором, которую можно распараллелить, но это не тот случай, когда вы пытаетесь сделать. Если вы хотите прочитать строки из файла, выполнить довольно тяжелую обработку каждой строки и затем записать их в какой-либо другой файл, multiprocessing поможет, но это не похоже на то, что вам нужно делать любая обработка перед записью каждой строки.

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

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

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

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..