Обработка нескольких файлов в папке с помощью многопроцессорной обработки - PullRequest
0 голосов
/ 04 февраля 2019

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

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

0 голосов
/ 04 февраля 2019

Вашей функции 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.

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

...