Обработка нескольких файлов в папке с помощью многопроцессорной обработки
Я пытаюсь прочитать кучу файлов в папке, обработать содержимое и сохранить их. Поскольку у меня много файлов, мне нужно распараллелить операцию.
Вот код, который я пробовал, но когда я его запускаю, ничего не происходит, я даже не получаю никакой ошибки. Это просто застряло. Обратите внимание, что если я использую напрямую process_file()
с именем файла, это работает.
from multiprocessing import Pool
from pathlib import Path
import torch
source_dir = Path('source/path')
target_dir = Path('target/path')
def process_file(file):
with open(file, 'r') as f:
result = ... # do stuff with f
target = target_dir / file.name
torch.save(result, target)
p = Pool(10)
p.map(process_file, source_dir.iterdir())
Я думал, что, может быть, это потому, что .iterdir()
дает генератор, но у меня та же проблема с os.listdir()
, Что мне не хватает?
Заранее спасибо.
1 ответ
Ваша функция process_file
нужен полный путь к файлу, чтобы открыть его.
Вы можете использовать os
Модуль для присоединения к вашей текущей рабочей директории с интересующей вас папкой.
full_paths = []
for el in source_dir.iterdir():
full_paths.append(os.path.join(os.getcwd(),str(el)))
Теперь вы можете правильно позвонить process_file
метод итерации по элементам, присутствующим в full_paths
список.
Это должно сделать работу