Повышает ли нарезка кадров данных в многопроцессорной/многопроцессорной обработке производительность?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Повышает ли нарезка кадров данных в многопроцессорной/многопроцессорной обработке производительность?

Сообщение Anonymous »

Мне нужно выполнить некоторые вычисления на разных фрагментах некоторых больших фреймов данных.

Предположим, у меня есть 3 больших фрейма данных df1, df2 и df3.

Каждый из которых имеет столбец «Дата».

Мне нужно выполнить некоторые вычисления над этими кадрами данных на основе срезов даты и поскольку каждая итерация не зависит от на другой итерации мне нужно выполнять эти итерации одновременно.

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

df1              # a big dataframe
df2              # a big dataframe
df3              # a big dataframe
Изображение


Поэтому я определяю желаемую функцию, и в каждом дочернем процессе сначала создается фрагмент df1, df2, df3 внутри процесса, затем другие вычисления продолжаются.

Начиная с df1, и df3 — глобальные фреймы данных, мне нужно указать их в качестве аргументов в моей функции. В противном случае он не будет распознан.

Примерно так:

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

slices = [ '2020-04-11', '2020-04-12', '2020-04-13', ]
# a list of dates to get sliced further

def my_func(slice,df1=df1,df2=df2,df3=df3):
sliced_df1 = df1[df1.Date >  slice]
sliced_df2 = df2[df2.Date <  slice]
sliced_df3 = df3[df3.Date >= slice]
#
# other computations
# ...
#
return desired_df
Параллельная обработка настраивается, как показано ниже:

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

import psutil
pool = multiprocess.Pool(psutil.cpu_count(logical=False))

final_df = pool.map(my_func,[slice for slice in slices])
pool.close()
final_df = pd.concat(final_df, ignore_index = True)
Однако кажется, что при выполнении запускается только одно ядро.

Я полагаю, что, поскольку каждый дочерний процесс хочет получить доступ к глобальным фреймам данных df1, df2 и df3, должен быть общая память для дочернего процесса, и когда я искал в сети, я думаю, мне придется использовать multiprocessing.manager(), но я не уверен, как его использовать и прав ли я насчет его использования?

Я вообще-то новенький к концепции параллельной обработки, и я признателен, если кто-то может помочь.

PS: Кажется, мой вопрос похож на этот пост. Однако на него нет принятого ответа.

Подробнее здесь: https://stackoverflow.com/questions/613 ... erformance
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Палиндромы и нарезка струны. Производительность
    Anonymous » » в форуме Python
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous
  • Палиндромы и нарезка струны. Производительность
    Anonymous » » в форуме Python
    0 Ответы
    5 Просмотры
    Последнее сообщение Anonymous
  • Палиндромы и нарезка струны. Производительность
    Anonymous » » в форуме Python
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous
  • Распараллеливание Numba не повышает производительность при моделировании Монте-Карло?
    Anonymous » » в форуме Python
    0 Ответы
    25 Просмотры
    Последнее сообщение Anonymous
  • Почему пакетный вывод повышает производительность при использовании cout или подобных функций?
    Anonymous » » в форуме C++
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous

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