Pandas DataFrame多进程处理中的变量引用与性能优化问题求助
Pandas DataFrame多进程处理中的变量引用与性能优化问题求助
我现在碰到个棘手的问题:手里有个Pandas DataFrame,里面的列得按依赖关系依次计算——比如用A列算出B列,再靠B列去算F列这类。但受限于Python的GIL,单线程处理速度实在太慢了,想优化下执行效率。
我的核心需求是这样的:
- 先让第一块代码正常跑完
- 然后让函数1到3在第一块代码执行完成后通过多进程运行,这些函数要能引用前面代码生成的内容,而且生成的新列/变量还要能被后续的代码调用
- 最后让第二块代码等函数3执行完再运行,并且能用到前面所有步骤生成的结果
我尝试过把计算密集的代码块封装成独立函数,用多进程来跑,但踩了两个大坑:
- 函数里新建的列既没法引用之前代码生成的DataFrame内容,生成的结果也没法被后面的代码调用
- 我试着在每个函数里用局部变量去引用全局的DataFrame,但这样一来多进程处理的耗时反而比单线程还长很多
我是Python新手,目前写了部分代码,麻烦各位大佬帮忙看看问题出在哪,该怎么调整:
import pandas as pd import multiprocessing as mp ## 我先拉取了一些数据 df['Date'] = df['timestamp'].apply(lambda x: pd.to_datetime(x*1000000)) df['volume'] = df['volume_og'] ... def functionone(): df = pd.DataFrame() df['market_9'] = df.apply(lambda x : "9" if x['Date'] >= x['market_9_start'] and x['Date'] < x['market_9_end'] else None, axis=1) ... def functiontwo(): df = pd.DataFrame() ... def functionthree(): df = pd.DataFrame() df['nine_score'] = df.apply(lambda x : x['strength'] if x['market_9'] == "9" else None, axis=1) ... fig = make_subplots(specs=[[{"secondary_y": True}]]) fig.add_trace( go.Bar( x=df['Date'], y=df['volume'], ... ), secondary_y=True, ) if __name__ == '__main__': p1 = mp.Process(target=functionone) p2 = mp.Process(target=functiontwo) p3 = mp.Process(target=functionthree) p1.start() p2.start() p3.start() ...
备注:内容来源于stack exchange,提问作者beezy4deux
相关产品推荐
相关产品推荐

