2016-12-27 3 views
0
私はPythonでマルチプロセッシング・ライブラリを使用してい

でグローバル変数にアクセスできません。値は変更されずにFirstのままです。ここ が出力されます:pは新しいプロセス、ない新しいスレッドあるのでは、下のコードでのpython

hello 
before: First 
after: First 

答えて

1

あなたが見ている動作です。新しいプロセスを生成すると、初期プロセスの状態を完全にコピーしてから、並列実行を開始します。スレッドを生成すると、最初のスレッドとメモリが共有されます。

プロセスはメモリ分離を持つため、共有メモリへの読み書きによって競合条件エラーが発生することはありません。しかし、子プロセスのデータを親プロセスに戻すには、パイプのようなプロセス間通信の何らかの形式を使用する必要があります。また、メモリを使用するため、生成するコストが高くなります。いつものようにコンピュータサイエンスでは、トレードオフをしなければなりません。詳細については

、以下を参照してください

をあなたが実際に代わりにスレッドを使用することを検討して、達成しようとしているものに基づいています。

0

グローバル状態は共有されていないため、子プロセスによる変更は無効です。

実際にそれが唯一の生み出し プロセスのグローバル変数を変更しない:ここで

が理由です。プロセス内でアクセスする場合は、それを見ることができます。 そのプロセスでは、グローバル変数環境は初期化されますが、 の変更はプロセス自体に限定され、 は全体ではありません。

このを試してみてください

from multiprocessing import Process 
import os 
from time import sleep as delay 

test = "First" 

def f2(): 
    print ("f2:" + test) 

def f(): 
    global test 
    print ('hello') 
    print ("before: "+test) 
    test = "Second" 
    f2() 

if __name__ == '__main__': 
    p = Process(target=f, args=()) 
    p.start() 
    p.join() 
    delay(1) 
    print("after: "+test) 

が起こっていただきました!あなたは本当にそれはあなたを助けるかもしれないこのdocまたはpostを読んで、それを行うための別の方法は、自分のプロセスからの変更を使用する必要がある場合には説明しています。

関連する問題