Это общий вопрос.Я разработал некоторый код, который изначально был просто длинной серией команд.Как только все заработало, я попытался ускорить время выполнения, используя многопроцессорный модуль Python.Тем не менее, кажется, что польза от старого последовательного кода и нового параллельного кода почти одинакова, а обработка этого списка файлов занимает почти одинаковое время.
Чтобы получить некоторые подробности.Код идентифицирует список файлов, и для каждого файла:
- Использует модуль регулярных выражений для поиска кодов начала и конца данных
- извлекает данные в pandas df
- нарезает часть df и создает массив numpy и сплайн данных
- извлекает некоторые значения (max, min и т. Д.) Из данных numpy
- отображает сплайн с помощью matplotlib
Последовательная версия скрипта перебирает список файлов, в то время как многопроцессорная версия скрипта, по сути, передает список файлов в функцию pool.map (которая, я думаю, затем назначает файл на процессор).
Я знал, что операции ввода-вывода плохо масштабируются с помощью многопроцессорного модуля.Но я думал, что единственной операцией ввода-вывода здесь является первоначальное открытие и чтение каждого файла.Мое понимание того, что представляет собой ввод-вывод, ошибочно?Я также читал, что numpy плохо работает с многопроцессорностью, что также может быть частью проблемы.
На самом деле, во время записи мне пришло в голову, что ввод / вывод относится к чтению и записи в память, а не только на диск (думаю, пенни упал).Этот скрипт выполняет много вызовов и генерирует новые массивы, а также новые списки, так что теперь я думаю, что все они представляют собой маневры ввода / вывода, и поэтому улучшения не происходит?
Итак, я на самом деле не прошу исправить, а просто объяснить, если мое понимание неверно.
Спасибо