Обработка нескольких файлов в папке с помощью многопроцессорной обработки

Я пытаюсь прочитать кучу файлов в папке, обработать содержимое и сохранить их. Поскольку у меня много файлов, мне нужно распараллелить операцию.

Вот код, который я пробовал, но когда я его запускаю, ничего не происходит, я даже не получаю никакой ошибки. Это просто застряло. Обратите внимание, что если я использую напрямую 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 список.

Это должно сделать работу

Другие вопросы по тегам