Многопроцессорность панд – использование глобальных объектов во всех процессах ⇐ Python
Многопроцессорность панд – использование глобальных объектов во всех процессах
Мне нужно выполнять функцию разными процессами, при этом каждый процесс должен формироваться по данным таблицы (месяцы), а сама функция должна получать датафреймы.
Надеюсь, кто-нибудь напишет код для правильного вызова многопроцессорности в этом случае
Программы будут работать примерно так:
У меня есть функция манипулирования данными, которой необходимо получить три кадра данных (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)?
Мне нужно выполнять функцию разными процессами, при этом каждый процесс должен формироваться по данным таблицы (месяцы), а сама функция должна получать датафреймы.
Надеюсь, кто-нибудь напишет код для правильного вызова многопроцессорности в этом случае
Программы будут работать примерно так:
У меня есть функция манипулирования данными, которой необходимо получить три кадра данных (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)?
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Вычитание серии панд из всех элементов другой серии панд с общим идентификатором
Anonymous » » в форуме Python - 0 Ответы
- 44 Просмотры
-
Последнее сообщение Anonymous
-