У меня есть несколько сотен тысяч файлов csv, к которым я хотел бы применить ту же функцию. Что-то вроде следующей фиктивной функции:
def process_single_file(fname):
df = pd.read_csv(fname)
# Pandas and non-pandas processing
df.to_csv(f"./output/{fname}")
Поскольку цикл по всем файлам по отдельности занял бы слишком много времени, мой вопрос заключается в том, какой самый эффективный способ запланировать и распараллелить это выполнение - никакие процессы не зависят друг от друга. Я начал с попытки использовать python s multiprocessing
:
import multiprocessing
files = sorted(glob.glob("./input/*.csv"))
processes = []
for fname in files:
p = multiprocessing.Process(target=process_file, args=(fname,))
processes.append(p)
p.start()
for process in processes:
process.join()
Мой компьютер, однако, похоже, не любит этот процесс, поскольку он быстро перегружает все ЦП и приводит к замедлению работы и вылетает. Есть ли более эффективный способ снизить нагрузку на все ЦП и запланировать задачи, такие как использование Dask
, какого-то сценария Bash
или изменение python
? Заранее спасибо.