类方法过程不会改变对象的属性

时间:2015-10-07 13:30:54

标签: python class python-multiprocessing

这是我在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()没有更改self.number的{​​{1}}?它们都属于同一个班级f

我可以更改哪些内容以接收此输出:

Foo()

/编辑1:

我试过这个,结果相同(为什么?):

1
10
2
20
3
30
4
40
...

与之前相同的输出。

1 个答案:

答案 0 :(得分:2)

您正在使用multiprocessing。简短(有点简化)的答案是默认情况下不共享内存的进程。请尝试使用threading

如果您一心想尝试使用共享内存和进程,请查看有关多处理的文档中的sharing state

daemon也没有按照您的想法行事。如果一个进程创建了子进程,那么它会在它退出时尝试杀死所有守护进程的子进程。所有流程都将在后台运行,您只需要启动它们。