私は最終的には行を読み、その行の情報を使っていくつかの計算を行い、その結果をいくつかのグローバルオブジェクトに追加しますが、働くたとえば、以下のコードではtestは常に0です。私はこれが間違っていることを知っており、私はそれを他の方法でやってみましたが、それでも動作していません。Pythonのマルチプロセッシング時にグローバル変数を変更する
import multiprocessing as mp
File = 'HGDP_FinalReport_Forward.txt'
#short_file = open(File)
test = 0
def pro(temp_line):
global test
temp_line = temp_line.strip().split()
test = test + 1
return len(temp_line)
if __name__ == "__main__":
with open("HGDP_FinalReport_Forward.txt") as lines:
pool = mp.Pool(processes = 10)
t = pool.map(pro,lines.readlines())
グローバルは、一般的に、あなたが何か間違ったことをやっている兆候です。あなたのプログラムがそれらを避けるために働く方法を変更することをお勧めします。長期的には頭痛を軽減し、より良い方法が常にあります。 –
マルチプロセッシングモジュールのポイントは、同じプロセス内のスレッドではなく、子プロセスを生成することです。これは通常のトレードオフと同じです。残念ながら、ドキュメントではこれらのトレードオフについては説明していません。ドキュメンテーションの「プログラミングガイドライン」をすべて守っていれば、理解できなくなるかもしれませんが、本当に学ぶべきです。 – abarnert