Многопроцессорность панд – использование глобальных объектов во всех процессахPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Многопроцессорность панд – использование глобальных объектов во всех процессах

Сообщение Anonymous »


Мне нужно выполнять функцию разными процессами, при этом каждый процесс должен формироваться по данным таблицы (месяцы), а сама функция должна получать датафреймы.

Надеюсь, кто-нибудь напишет код для правильного вызова многопроцессорности в этом случае

Программы будут работать примерно так:

У меня есть функция манипулирования данными, которой необходимо получить три кадра данных (df1,df2,df3).

def манипуляция(df1,df2,df3): """ чтение данных из фрейма данных и выполнение всех видов манипуляций с данными для многопроцессорной обработки """ возврат DF Эта функция вернет в качестве результата 1 кадр данных, который я хочу объединить с результатами всех процессов.

Процессы и данные должны быть разделены по месяцам (поле в кадрах данных)

Months = pd.DatetimeIndex(data['Date']).month.drop_duulates().tolist() df1 = df1[pd.DatetimeIndex(df1['Date']).month == m] df2 = df1[pd.DatetimeIndex(df2['Date']).month == m] df3 = df1[pd.DatetimeIndex(df3['Date']).month == m] У меня всего несколько идей и я не знаю, как их правильно реализовать:
[*]
используйте Starmap и передайте в функцию список списков кадров данных в качестве аргумента:

arg = [ [df1[pd.DatetimeIndex(df1['Date']).month == 1],df1[pd.DatetimeIndex(df2['Date']).month == 1], df1[pd.DatetimeIndex(df2['Date']).month == 1]], [df1[pd.DatetimeIndex(df1['Date']).month == 2],df1[pd.DatetimeIndex(df2[ 'Дата']).месяц == 2],df1[pd.DatetimeIndex(df2['Дата']).месяц == 2]]...] pool = mp.Pool(processes = (mp.cpu_count() - 1)) результаты = пул.карта(манипуляция, arg) пул.закрытие() пул.join() results_df = pd.concat(результаты) И вот у меня вопрос, как создать такой список и будет ли он в этом случае рассчитываться по месяцам?
[*]
создавайте процессы в цикле и присоединяйтесь к ним:

процессы = [] для индекса, месяца в перечислении (месяцы): p = multiprocessing.Process(target=манипуляция, args=(месяц,)) процессы.append(p) п.старт() # Подождем завершения всех процессов для p в процессах: p.join() Но как в этом случае передать фреймы данных (df1,df2,df3)?
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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