Monkeypatching and multiprocessing.我有一个类,我需要用其他函数替换对象方法(猴子修补的想法,我必须这样做,因为我只知道哪个函数将在运行时被替换(,然后我需要对所有对象使用多处理来调用这些函数并做一些事情(修改属性的值(。
一个简单的例子:我有一个名为Test的简单类,它有一个属性和一个叫做func的方法
class Test:
def __init__(self):
self.attribute = 1
def func(self):
print("bye")
创建两个对象并将它们放在列表中
a = Test()
b = Test()
c = [a, b]
定义另一个函数调用 func2
def func2(obj):
obj.attribute = obj.attribute + 1
print(obj.attribute)
print("hi")
将对象 A 中的乐趣替换为 func2
a.func = types.MethodType(func2, a)
运行多处理
def func123(x):
c[x].func()
return c[x]
if __name__ == '__main__':
pool = multiprocessing.Pool()
d = pool.map(func123, range(2))
pool.close()
线程线程 3 中的异常: 属性错误:"测试"对象没有属性"func2">
如果我不使用多处理,只是简单地调用 a.func,一切正常。此外,如果 func123 中没有返回,则代码将正常工作,但不会更新对象 a 的属性值。
主点中的绑定属性需要。
if __name__ == '__main__':
a.func = types.MethodType(func2, a)
pool = multiprocessing.Pool()
d = pool.map(func123, range(2))
pool.close()