Как избежать повторного чтения CSV в каждом параллельном процессе в Python?Python

Программы на Python
Ответить
Anonymous
 Как избежать повторного чтения CSV в каждом параллельном процессе в Python?

Сообщение Anonymous »

Я работаю над проектом Python, где мне нужно обработать большой файл CSV с помощью Polars. В настоящее время я читаю файл CSV внутри каждого параллельного процесса. Это работает, но неэффективно, поскольку операция read_csv повторяется для каждого процесса.
Чтобы повысить производительность, я попробовал чтение CSV-файл один раз перед запуском параллельных процессов и передачей полученного DataFrame каждому процессу. Однако я заметил, что в этой настройке выполнение кода заняло значительно больше времени.
Вот упрощенная версия моего рабочего процесса:

Код: Выделить всё

import polars as pl
from concurrent.futures import ProcessPoolExecutor

def process_data(df, numbers):
# Filter and process data (example)
return df.filter(pl.col("Points").is_in(numbers))

# Reading inside each process
def worker(task_param):
df = pl.read_csv("path/to/file.csv")
return process_data(df, task_param)

with ProcessPoolExecutor(max_workers=4) as executor:
task_params_list = [[10, 20], [30, 40], [50, 60], [70, 80]]
results = list(executor.map(worker, task_params_list))
Когда я переместил pl.read_csv за пределы рабочей функции и попытался разделить DataFrame между процессами, выполнение стало медленнее:

Код: Выделить всё

df = pl.read_csv("path/to/file.csv")

def process_data(df, numbers):
# Filter and process data (example)
return df.filter(pl.col("Points").is_in(numbers))

def worker(task_param):
df = task_param[0]
numbers = task_param[1:]
return process_data(df, numbers)

with ProcessPoolExecutor(max_workers=4) as executor:
task_params_list = [[df, 10, 20], [df, 30, 40], [df, 50, 60], [df, 70, 80]]
results = list(executor.map(worker, task_params_list))
Я подозреваю, что замедление связано с сериализацией DataFrame и копированием в каждый процесс, но я не знаю, как с этим справиться.
Мои вопросы:
Как мне избежать повторного чтения файла CSV в каждом параллельном процессе, сохраняя при этом хорошую производительность?
Есть ли лучший подход к совместному использованию или повторному использованию Polars DataFrame в параллельных процессах?
>Любые рекомендации или идеи были бы очень полезны оценил.

Подробнее здесь: https://stackoverflow.com/questions/793 ... -in-python
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»