Monkeypatching и многопроцессорность. У меня есть класс, и мне нужно заменить метод объекта какой-либо другой функцией (идея monkeypatching, и я должен сделать это, потому что я буду знать только, какая функция будет заменена во время выполнения), тогда мне нужно использовать многопроцессорность для всехобъекты, которые вызывают эти функции и что-то делают (изменяют значение атрибута).
Простой пример: у меня есть простой класс с именем 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")
заменить fun в объекте 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()
Исключение в потоке Thread-3: AttributeError: у объекта 'Test' нет атрибута 'func2'
Если я не использую многопроцессорность и просто вызываю a.func, все работает нормально. Кроме того, если в func123 нет возврата, коды будут работать без ошибок, но не будут обновлять значение атрибута для объекта a.