многопроцессорная обработка чтения большого количества файлов и работа с этими файлами на python

#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 правильное использование, как описал Даниэль, вероятно, является лучшим решением.