#python #multiprocessing
Вопрос:
Я пытаюсь прочитать почти 50 файлов больших размеров, так можно ли разделить несколько файлов на процессор (скажем, 5 файлов на владельца, если я возьму 10 процессоров)? Я нахожусь на очень начальном этапе многопроцессорной обработки в python. Я пытаюсь использовать приведенный ниже код, но я думаю, что проблема здесь в том, что он читает файл последовательно (после завершения чтения одного файла начинается чтение другого). Мой код приведен ниже
import multiprocessing import time import pandas as pd import glob def process(fileread): print(multiprocessing.current_process()) return pd.read_csv(fileread,header=None,sep='ss |,',engine='python') if __name__ == '__main__': pool = multiprocessing.Pool(10) for i sorted(glob.glob("*.dat")): result = pool.map(process,[i]) print(result) pool.close() pool.join()
Я печатаю здесь последовательно один файл за другим. Я думаю, что я не смог сделать правильный код, может быть. ищу помощи.
К вашему сведению, файлы могут быть прочитаны случайным образом, т. е. нет необходимости читать определенным образом.
Комментарии:
1. Похоже, вы вызываете
pool.map()
только один файл. Функция будет блокироваться до тех пор, пока все элементы не будут сопоставлены. Поскольку вы передаете только один файл, он будет заблокирован для каждого файла. Попробуйте передать все файлы сразу:result = pool.map(process, sorted(glob.glob("*.dat")))
(и удалитеfor
цикл). После этого содержимое файла должно быть вresult
.2. Спасибо, @DanielJunglas, что указал на мою ошибку.
3. @avi, то, как вы написали это ранее , вы могли бы использовать
apply_async
вместоmap
этого, однакоmap
правильное использование, как описал Даниэль, вероятно, является лучшим решением.