Python多处理:“self。”变量在其他函数中没有更新?

时间:2017-06-30 15:51:38

标签: python python-multiprocessing local-variables

看起来我在这里运气不好...很抱歉问问大家。 :(

我正在尝试执行以下操作:

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)

但是,在结果中,它不会在run()中更新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
[...]

我认为,“self”会表明这是这个类/对象的“全局”参数吗?

即使我将run()函数修改为“while true: - &gt; break”循环,仍然会出现同样的问题。我的思维错误在哪里?

提前致谢...

1 个答案:

答案 0 :(得分:2)

TESTPROCESS.start()导致run()方法在单独的进程中执行;这就是整点。因此,您没有一个TestClass实例;你有两个,它们存在于不同的进程中。其中一个实例由您对setVar的调用更新,而另一个(由于是另一个对象)则不是。如果您希望能够在流程之间进行通信,请查看pipes and queues