使用 concurrent.futures 不返回类覆盖 __getattribute__ 方法

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

TestClass
中的函数使用了一个全局变量
data_test
。我覆盖了
DataTest
的特殊方法。我想在
concurrent.futures
中使用
run_func
。在这个函数中,我访问了
a1
中的
data_test
属性。这段代码什么都不返回。但是,当我使用for循环,返回就是我想要的。

我在python中搜索

concurrent.futures
__getattribute__
但是无法得到我想要的结果

如何解决问题?

from concurrent.futures import ProcessPoolExecutor as Pool


class TestClass:
    def __init__(self, n_processes=1):
        global data_test
        data_test = DataTest()

        self.n_processes = n_processes

    def test_func(self):
        print("test_func", data_test.a1)

    def run_func(self):
        print("run func")
        with Pool(max_workers=self.n_processes) as executer:
            _ = [executer.submit(self.test_func) for _ in [1, 2, 3, 34, 5, 6]]

        # for _ in [1, 2, 3, 34, 5, 6]:
        #     self.test_func()


class DataTest(object):
    def __getattribute__(self, item):
        if item == "a1":
            if item in self.__dict__:
                self.__dict__[item] += 1
            return super(DataTest, self).__getattribute__(item)
        return super(DataTest, self).__getattribute__(item)

    def __getattr__(self, item):
        if item == "a1":
            self.__dict__[item] = 1
            return 1

        else:
            return super(DataTest, self).__getattribute__(item)


if __name__ == "__main__":
    test_class = TestClass(n_processes=16)
    test_class.run_func()

concurrent.futures getattr getattribute
© www.soinside.com 2019 - 2024. All rights reserved.