看起来我在这里运气不好...很抱歉问问大家。 :(
我正在尝试执行以下操作:
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”循环,仍然会出现同样的问题。我的思维错误在哪里?
提前致谢...
答案 0 :(得分:2)
TESTPROCESS.start()
导致run()
方法在单独的进程中执行;这就是整点。因此,您没有一个TestClass
实例;你有两个,它们存在于不同的进程中。其中一个实例由您对setVar
的调用更新,而另一个(由于是另一个对象)则不是。如果您希望能够在流程之间进行通信,请查看pipes and queues。