Предположим, у меня есть 3 больших фрейма данных df1, df2 и df3.
Каждый из которых имеет столбец «Дата».
Мне нужно выполнить некоторые вычисления над этими кадрами данных на основе срезов даты и поскольку каждая итерация не зависит от на другой итерации мне нужно выполнять эти итерации одновременно.
Код: Выделить всё
df1 # a big dataframe
df2 # a big dataframe
df3 # a big dataframe

Поэтому я определяю желаемую функцию, и в каждом дочернем процессе сначала создается фрагмент df1, df2, df3 внутри процесса, затем другие вычисления продолжаются.
Начиная с df1,
Код: Выделить всё
df2
Примерно так:
Код: Выделить всё
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