类方法进程未更改对象的属性



这是我学习Python的第二天,我发现这是一门非常酷的语言,我想用它尝试不同的东西。

是否有可能调用一个对象并创建该对象的方法的守护进程,这将改变对象的属性?

from multiprocessing import Process
import time

class Foo(object):
    def __init__(self):
        self.number = 1
        # this attribute...
    def loop(self):
        while 1:
            print self.number
            # ...is changed here
            self.number += 1
            time.sleep(1)

if __name__ == '__main__':
    f = Foo()
    p = Process(target=f.loop)
    p.deamon = True # this makes it work in the background
    p.start()
    # proceed with the main loop...
    while 1:
        time.sleep(1)
        print f.number * 10
结果:

1
10
2
10
3
10
4
10
...

为什么f.loop()不改变fself.number ?它们都是同一类Foo()的一部分。

我可以修改什么来接收这个输出:

1
10
2
20
3
30
4
40
...

/编辑1:

我尝试了这个,得到了相同的结果(为什么?):

class Foo(Process):
    def __init__(self):
        super(Foo, self).__init__()
        self.daemon = True # is daemon
        self.number = 1
        self._target = self.loop # on start() it will run loop()
    def loop(self):
        while 1:
            print self.number
            self.number += 1
            time.sleep(1)

if __name__ == '__main__':
    f = Foo() # is now Process
    f.start() # runs f.loop()
    while 1:
        time.sleep(1)
        print f.number * 10

输出与之前相同

您正在使用multiprocessing。简短的(稍微简化的)回答是,默认情况下进程不共享内存。试着用threading代替。

如果你下定决心要尝试共享内存和进程,那么请查看multiprocessing文档中的共享状态。

而且daemon并不像你想象的那样。如果一个进程创建了子进程,那么当它退出时,它将试图杀死所有的守护子进程。所有的进程都会在后台运行,你只需要启动它们。

相关内容

  • 没有找到相关文章

最新更新