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()