python — реализация альтернативных (совместимых с API) классов для маринования / отжима

В проекте распределенных вычислений мы используем Pyro для передачи объектов по проводам между узлами; Pyro внутренне сериализует и десериализует объекты, используя pickle.

Некоторые классы в проекте имеют две реализации: одна на чистом Python (для простоты установки, особенно для пользователей Windows), другая на c ++ / boost :: python (намного быстрее, но требует boost + знания о том, как скомпилировать модуль расширения) , Классы Python и C ++ поддерживают выбор (в C ++ это делается с помощью boost :: python).

Эти классы имеют другое полное имя (mupif.Octree.Octant против mupif.fastOctant.Octant), но последний псевдоним первого и переписывает определение чистого Python (mupif.Octree.Octant=mupif.fastOctant.Octant), поэтому он прозрачен для пользователя, и быстрый вариант всегда используется, если он доступен на узле.

Тем не менее, рассол использует __module__ а также __class__ чтобы идентифицировать экземпляр, таким образом, когда объект, основанный на c ++, передается по сети другому узлу, который его не поддерживает, удаление не удастся.

Какое решение для этого? Допустимо ли менять класс __module__т.е. foo.fastOctant.Octant.__class__.__module__='mupif.Octree'? Может ли быть побочный эффект, которого я пока не вижу?

0

Решение

Помогает ли псевдоним другим способом (fast = normal), если нет быстрой реализации? Может быть, это можно сделать только на время удаления, а затем наоборот, чтобы не путать проверки в другом коде?

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]