我有一个关于并行化DataFrame操作的一般性问题。
假设我有一个这样的操作(伪代码,df
,df1
和df2
是 Dataframe )
df1 = pandas_operations(df, arg1, arg2)
df2 = pandas_operations(df, arg3, arg4)
result = pd.concat([df1, df2])
其中pandas_operations
是一个函数,它大量使用pandas API来处理数字。
在什么情况下可以并行创建df1
和df2
(例如,用multiprocessing
)有意义,以加快程序?
我问这个问题主要是因为pandas
将大量计算繁重的任务委托给了numpy
,而numpy
(据我所知)在调用用C编写的代码时已经使用了多个内核。如果这是真的,那么我可以用multiprocessing
并行创建df1
和df2
,但是每个DataFrame的创建可能比顺序程序慢。
1条答案
按热度按时间lbsnaicq1#
我不想让你相信我是这个领域的Maven,但我认为numpy所做的事情之间有很大的区别,它被称为SIMD,用于单指令,多数据,并允许矢量化操作以提高速度。这发生在CPU的架构级别。多处理是有几个CPU,每个都可以做SIMD,至少从我的理解。
我想阅读这篇文章,从一个更有知识的人,可能会有所帮助:Difference between SIMD and Multi-threading。它还谈到了SIMD和多处理之间的差异。
所以要回答第一个问题,它可能会更快(但这是非常高的水平,需要量化,我敢打赌这将取决于大小和数量的框架。为一些处理速度快的元素示例化新池可能会适得其反),以并行创建df1和df2,但由于df数据必须复制并传递给两个独立的进程,因此会占用更多的RAM。