Операции ввода-вывода в большинстве случаев не ограничены ЦП, поэтому использование нескольких процессов является излишним. Использование нескольких потоков может быть полезным, но pb.read_csv
не только читает файл, но и анализирует его, что может быть ограничено ЦП. Я предлагаю вам читать файлы с диска с помощью asyncio, как только это было изначально сделано для этой цели. Вот код для этого:
import asyncio
import aiofiles
async def read_file(file_name):
async with aiofiles.open(file_name, mode='rb') as f:
return await f.read()
def read_files_async(file_names: list) -> list:
loop = asyncio.get_event_loop()
return loop.run_until_complete(
asyncio.gather(*[read_file(file_name) for file_name in file_names]))
if __name__ == '__main__':
contents = read_files_async([f'files/file_{i}.csv' for i in range(10)])
print(contents)
Функция read_files_async
возвращает список содержимого файла (байтовые буферы), который вы можете передать pd.read_csv
.
Я думаю, что оптимизации чтения файлов должно быть достаточно, но вы можете анализировать содержимое файлов параллельно с несколькими процессами (потоки и асинхронность не увеличат производительность процесса анализа):
import multiprocessing as mp
NUMBER_OF_CORES = 4
pool = mp.Pool(NUMBER_OF_CORES)
pool.map(pb.read_csv, contents)
Вы должны установить NUMBER_OF_CORES
в соответствии со спецификацией вашей машины.