如何将@property与Python ProcessManager一起使用

问题描述 投票:0回答:1

我有一个包含

@property
的类,如果在从另一个函数设置该函数之前访问该属性,则希望引发
RuntimeError
。我现在的问题是,当我在
ProcessManager
中使用此类时,在构建此管理器时会自动调用该属性,导致始终引发错误。我该如何解决这个问题?

我的代码如下:

from multiprocessing.managers import BaseManager
class TestProvider:
    def __init__(self):
        self.__result = None

    def calculate(self, i1, i2):
        self.__result = i1 + i2

    @property
    def result(self):
        if not self.__result:
            raise RuntimeError("Tried to access property which is Not calculated")
        return self.__result



if __name__ == "__main__":
    BaseManager.register("TestProvider", TestProvider)
    manager = BaseManager()
    manager.start()

    provider = manager.TestProvider()
python python-3.x multiprocessing
1个回答
0
投票

我可能不知道适合您情况的正确/更好的解决方案,但我有一个想法。

使用标志来触发“if”第一次运行的条件。

from multiprocessing.managers import BaseManager

# Initial variables
RuntimeStartFlag = 0

class TestProvider:
    def __init__(self):
        self.__result = None

    def calculate(self, i1, i2):
        self.__result = i1 + i2

    @property
    def result(self):
        if not self.__result and RuntimeStartFlag:
            raise RuntimeError("Tried to access property which is Not calculated")
        return self.__result



if __name__ == "__main__":
    BaseManager.register("TestProvider", TestProvider)
    manager = BaseManager()
    manager.start()

    provider = manager.TestProvider()
    RuntimeStartFlag = 1
    # Continue testing after setting the "RuntimeStartFlag"...

注意:我不确定这是否正确,可能有更好的解决方案,我刚刚想出了一个快速解决方案。 请随意亲自测试一下,如果我做错了什么,请告诉我。

© www.soinside.com 2019 - 2024. All rights reserved.