我需要对一些大数据帧的不同切片进行一些计算。
假设我有 3 个大数据框df1
,df2
并且df3
.
每个都有一"Date"
列。
我需要根据日期切片对这些数据帧进行一些计算,并且由于每次迭代都独立于其他迭代,因此我需要同时进行这些迭代。
df1 # a big dataframe
df2 # a big dataframe
df3 # a big dataframe
所以我定义了我想要的函数,在每个子进程中,首先在进程中创建一个 , ,的切片df1
,然后进行其他计算。df2
df3
由于df1
和是全局数据框,df2
因此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:看来我的问题与这篇文章类似。但是,它没有一个公认的答案。