私はPython Multiprocessing.poolについて簡単に質問しています。ここに私のコードです:ループ内でのmultiprocessing.poolの使用とターゲット機能の更新
import multiprocessing as mp
info =999
def func(x):
global info
print info
return x**3
pool = mp.Pool()
for i in range(2):
print "Iteration: ", i
results = pool.map(func, range(1,10))
print "Value of info", info
info += 1
print results
print "Iteration", i, "End"
print
、出力は次のようになります。2回目の反復では、999は私がグローバル変数の情報を更新するにはどうすればよいの代わりに1000の再印刷されて、なぜ私が疑問に思って
999
999
999
999
999
999
999
999
999
999
999
999
999
999
999
999
999
999
Iteration: 0
Value of info 999
[1, 8, 27, 64, 125, 216, 343, 512, 729]
Iteration 0 End
Iteration: 1
Value of info 1000
[1, 8, 27, 64, 125, 216, 343, 512, 729]
Iteration 1 End
2番目の反復で1000が印刷されるようにしますか?どうもありがとうございます!
うーん、私ドン」 2回目の反復では999が印刷されますが、1000が表示されます。さらに、 'info - = 1'を使用しているので、2回目の反復で' info == 998'を期待します。 –
申し訳ありませんが、コードはinfo + = 1でなければなりません。したがって、合計1899個が印刷されます。しかし、私がforループの情報を更新したとき、私は最後の999が1000であると予想しました.funcは情報を出力するので、 – Ksun46
基本的に、各プロセスには独自のグローバルセットがあります。状態を共有する場合は、[ドキュメントのオプション](https://docs.python.org/2/library/multiprocessing.html#sharing-state- between-processes)をお読みください。共有状態は、自明ではない提案です。 'multiprocessing'は本質的に、' subprocess'モジュールを包むスレッド型のインターフェースです。文字通り、別々のPythonプロセスが各作業者ごとに作成されるため、マルチ*処理* –