You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas DataFrame多进程处理中的变量引用与性能优化问题求助

Pandas DataFrame多进程处理中的变量引用与性能优化问题求助

我现在碰到个棘手的问题:手里有个Pandas DataFrame,里面的列得按依赖关系依次计算——比如用A列算出B列,再靠B列去算F列这类。但受限于Python的GIL,单线程处理速度实在太慢了,想优化下执行效率。

我的核心需求是这样的:

  • 先让第一块代码正常跑完
  • 然后让函数1到3在第一块代码执行完成后通过多进程运行,这些函数要能引用前面代码生成的内容,而且生成的新列/变量还要能被后续的代码调用
  • 最后让第二块代码等函数3执行完再运行,并且能用到前面所有步骤生成的结果

我尝试过把计算密集的代码块封装成独立函数,用多进程来跑,但踩了两个大坑:

  1. 函数里新建的列既没法引用之前代码生成的DataFrame内容,生成的结果也没法被后面的代码调用
  2. 我试着在每个函数里用局部变量去引用全局的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.13 20:18:08