Python 猴子修补类方法导致多处理错误



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

相关内容

  • 没有找到相关文章

最新更新