class Obj1(object):
def __init__(self):
self.var = 1
def func1(self, r):
self.var = self.var + 2
class Obj2(object):
def __init__(self):
self.arr = []
self.arr.append(Obj1())
def parallel_func(self, i):
self.arr[i].func1(i)
print "11111 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>", self.arr[i].var
def func3(self):
for i in range (3)
for i in range (2):
p = Process(target = self.parallel_func, args = (i,))
p.start()
print "22222 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>", self.arr[i].var
p.join()
if __name__=='__main__':
var = Obj2()
var.func3()
目的:コードで "parallel_func" を並列化するための oops とマルチプロセッシングの概念を使用する
問題:予想どおり、両方の print ステートメントで同じ出力が得られるはずです。しかし、それらは異なる結果を提供しています。反復ごとに、個々のプロセスは、以前の値ではなく、最初に初期化された変数を参照します。以前のプロセスの結果を使用するプロセスが必要です。
質問:
1. oops の概念を使用したため、グローバル変数がオブジェクト内でどのように処理されるかを知りたいです。
2.次のプロセスが最新の値を取得できるように、各プロセスが完了した後に変数を更新する他の方法はありますか。キューの概念を試しましたが、まだ問題が残っています。
3. multiprocessing.manager 機能はこの問題を解決できますか? はいの場合、それを手伝っていただけますか?
4.これを解決する他の方法は高く評価されます。