У меня есть 3 огромных pandas кадра данных, которые хотят поделиться ими среди многопроцессорных в python. Эти большие фреймы данных находятся в глобальном пространстве основного процесса:
df1 = pd.read_csv('df1.txt')
df2 = pd.read_csv('df2.txt')
df3 = pd.read_csv('df3.txt')
Функция, которая будет отображена в моей итерации, выглядит следующим образом:
def my_func(start_date):
sliced_df1 = df1[df1['start_date'] > start_date]
sliced_df2 = df2[df2['start_date'] > start_date]
sliced_df3 = df2[df2['start_date'] > start_date]
new_df = sliced_df1.merge(sliced_df2)
#other computations
return final_df
Итерируемая также является списком дат :
dates_list = ['2020-04-01', '2020-04-02', '2020-04-03',...]
Многопроцессорная конфигурация выглядит следующим образом:
from multiprocessing import Pool
pool = Pool(processes=16)
final_iterations = pool.map(my_func,[date for date in dates_list])
pool.close()
final_iterations = pd.concat(final_iterations, ignore_index = True)
Поскольку df1
, df2
и df3
находятся в основном процессе, они каким-то образом будут разделены среди многопроцессорных. Они не изменяются дочерними процессами и просто читаются. Я искал net, чтобы решить мою проблему, и я думаю, что мне нужно использовать Manger.Namespace
, но я не уверен, как его использовать. Пара сообщений, которые я прочитал: это и это .
Я новичок в концепции многопроцессорной обработки и ценю любую помощь.