python mutiprocessing
を使用して観察された以下の奇妙な動作を理解しようとしています。Pythonマルチプロセッシングでの予期しない動作
サンプルTestClassを:
class testClass(multiprocessing.Process):
def __del__(self):
print "__del__ PID: %d" % os.getpid()
print self.a
def __init__(self):
multiprocessing.Process.__init__(self)
print "__init__ PID: %d" % os.getpid()
self.a = 0
def run(self):
print "method1 PID: %d" % os.getpid()
self.a = 1
そして少しテストプログラムをマルチプロセッシング 輸入OS インポート:
TestClassをインポートTestClassをからprint "Start"
proc_list = []
proc_list.append(testClass())
proc_list[-1].start()
proc_list[-1].join()
print "End"
これが生成します。
Start
__init__ PID: 89578
method1 PID: 89585
End
__del__ PID: 89578
0
なぜd oesは印刷されません1
?
run
が実際には異なるプロセスで実行されていることがわかります。これが期待される動作であれば、プロセスを高価な__init__
にして、データベースをオープンする必要のあるプロセスと同じようにマルチプロセスを使用する人はどうでしょうか?
マルチプロセッシングのドキュメントでこの動作を強調表示しないでください。
「1」を印刷するコードはどれですか? – zvone
__del__からself.aを印刷します。実行メソッドは1に設定しますが、Python-Multiprocessingではデストラクタに伝播されません。 – Usul