【问题标题】:Why are attributes of a Process object not kept after run?为什么 Process 对象的属性在运行后不保留?
【发布时间】:2020-06-03 08:28:19
【问题描述】:

我有以下Process 的子类:

from multiprocessing import Process

class MyProcess(Process):
    def __init__(self, **kwargs):
        self.my_attribute = "debug0"
        print("my_attribute : ", self.my_attribute)

        super().__init__(**kwargs)

        self.my_attribute = "debug1"
        print("my_attribute : ", self.my_attribute)

    def run(self):
        self.my_attribute = "debug2"
        print("my_attribute : ", self.my_attribute)


my_process = MyProcess()

my_process.start()
my_process.join()

print("my_process.my_attribute : ", my_process.my_attribute)

我得到以下日志:

my_attribute :  debug0
my_attribute :  debug1
my_attribute :  debug2
my_process.my_attribute :  debug1

为什么my_attribute 属性在run 期间被更改时没有保持run 方法中的设置?在这种情况下,如何设置一个属性以在 run 函数执行完毕后保持其值?

【问题讨论】:

    标签: python object process attributes python-multiprocessing


    【解决方案1】:

    run函数运行在一个单独的进程中,有自己的内存空间和自己的my_process对象的副本,所以不能直接影响父进程中的my_process对象。如果您希望在子进程中运行 run 函数时更改父进程中的某些内容,则必须安排某种进程间通信。这不会因为使用 Process 类而自动发生。

    【讨论】:

    • 谢谢丹尼斯,我现在明白了。我认为整个my_process 对象将在一个单独的进程中,而不仅仅是run 函数。我将尝试将Queue 作为进程间通信,但我已经陷入僵局。好吧,多处理比我想象的要难?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-12
    • 1970-01-01
    • 2015-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多