2016-03-23 7 views
0

新しいプロセス内で値var1を変更することはできますか?キューなしでマルチプロセッシングでクラス値を変更するにはどうすればよいですか?

class A: 
    var1 = 0 

method2(): 
    var1 += 1 

method1(): 
    p = multiprocessing.Process(method2) 
    p.start() 
    p.join() 
    print(var1) 

メソッドmethod1()を呼び出します。 var1は変更されていません。ところで

A().method1() 
>>> 0 

私はので、PythonのGILのQueues

+1

まず、適切なコードを記入してください。これは実行されません。第2に、「あなた」がキューを使用できない理由を説明してください。 –

答えて

1

を使用することはできません、マルチプロセッシングは、唯一の完全に独立したタスク、および無共有メモリwhith使用することができます。したがって、プロセスpを作成すると、Aというインスタンスの値がコピーされ、このコピーされたインスタンスのvar1の値が変更され、元のインスタンスは変更されません。 https://docs.python.org/2/library/multiprocessing.html#sharing-state-between-processesあなたは貴様のプロセスが同時に同じ変数にアクセスしないようにする必要があり

from multiprocessing import Value 

var1 = Value('d', 0.0) 

、および使用から

: しかし、あなたはまだすることができますが、それはマルチプロセッシング共有配列/値を使用して起こりましたa Lock。 Hopefulyでは、multiprocessingモジュールで使用可能な共有変数はすべてLockとペアになっています。ロックにアクセスするには

var1.acquire() # get the lock 
# do stuff 
var1.release() # don't forget to release it 

私はこのことができます願っています。

+0

それは助けになりました!ありがとう! –

関連する問題