14

グローバル変数として非常に大きな Pandas データフレームにアクセスしています。この変数は、joblibを介して並行してアクセスされます。

例えば。

df = db.query("select id, a_lot_of_data from table")

def process(id):
    temp_df = df.loc[id]
    temp_df.apply(another_function)

Parallel(n_jobs=8)(delayed(process)(id) for id in df['id'].to_list())

この方法で元の df にアクセスすると、プロセス間でデータがコピーされるようです。元の df がどのサブプロセスでも変更されていないため、これは予期しないことですか? (またはそれは?)

4

2 に答える 2

3

ご指摘のとおり、Python マルチプロセッシングは通常、個別のプロセスを使用して行われます。つまり、プロセスはメモリを共有しません。np.memmapjoblib のドキュメントの少し下に記載されているように、問題を解決できる場合は潜在的な回避策がありますが、ディスクへのダンプは明らかに独自のオーバーヘッドを追加します: https://pythonhosted.org/joblib/parallel.html#working -with-number-data-in-shared-memory-memmaping

于 2015-11-09T16:36:02.547 に答える