2017-06-30 1 views
0

私はここに運が出ていないように見える...あなたに聞いて申し訳ありません。 :(Pythonマルチプロセッシング: "self。"変数が他の関数で更新されていませんか?

私は次の操作を実行しようとしています:

import multiprocessing 
import time 

class TestClass(multiprocessing.Process): 
    def __init__(self): 
     super(TestClass, self).__init__() 
     print("Initializing the test class...") 
     self.VARIABLE = 0 

    def run(self): 
     while self.VARIABLE < 10: 
      print("Sleeping... Variable now: " + str(self.VARIABLE)) 
      time.sleep(1) 

    def setVar(self, VALUE): 
     print("Setting new value from " + str(self.VARIABLE) + " to " + str(VALUE) + " ...") 
     self.VARIABLE = VALUE 


if __name__ == "__main__": 
    TESTPROCESS = TestClass() 
    TESTPROCESS.start() 
    time.sleep(5) 
    TESTPROCESS.setVar(5) 
    time.sleep(5) 
    TESTPROCESS.setVar(10) 

しかし、結果で、それが実行中self.VARIABLEを(更新しない)が、唯一のSETVARで()

c:\Python35\python.exe Test.py 
Initializing the test class... 
Sleeping... Variable now: 0 
Sleeping... Variable now: 0 
Sleeping... Variable now: 0 
Sleeping... Variable now: 0 
Sleeping... Variable now: 0 
Setting new value from 0 to 5 ... 
Sleeping... Variable now: 0 
Sleeping... Variable now: 0 
Sleeping... Variable now: 0 
Sleeping... Variable now: 0 
Sleeping... Variable now: 0 
Setting new value from 5 to 10 ... 
Sleeping... Variable now: 0 
Sleeping... Variable now: 0 
[...] 

が、私は「自己」は、これは、このクラス/オブジェクトのための「グローバル」のパラメータがあることを、示すことになる、と思った私が持っているために、実行()関数を変更しても

「真の中: - ?> break "ループでも同じ問題が発生します。私の思考ミス?予め

おかげ...

答えて

2

TESTPROCESS.start()は別のプロセスで実行されるrun()方法を引き起こします。それは一種のポイントです。結果として、TestClassインスタンスが1つもありません。 2つのプロセスがあります。これらのインスタンスの1つはsetVarへの呼び出しによって更新され、もう1つは(別のオブジェクトであるため)更新されません。プロセス間で通信できるようにしたい場合は、pipes and queuesを参照してください。

+0

* facepalm *はい。あなたは正しいです...私はそれをもっと複雑なシナリオですでに使用していますが、複雑さのために私はそれを単純にしたいと思っていました。 - ここでも簡単です。 - Mea culpa。 :) – Bigfoot29

関連する問題