2014-02-14 3 views
1

Я хотел бы заменить встроенный MPI4PY Pickle -сериализация с укропом. Согласно doc класс _p_Pickle должен иметь 2 атрибута, называемые dumps и loads. Тем не менее, питон говорит, что нет таких атрибутов при попытке следующегоmpi4py: Заменить встроенную сериализацию

from mpi4py Import MPI 
MPI._p_Pickle.dumps 

-> AttributeError: тип объекта «mpi4py.MPI._p_Pickle» не имеет атрибута «дамп»

Где есть dumps и loads ушел ?

+0

Возможно, я использую более старую версию? как 2 проверить версию mpi4py? Когда я пытаюсь «MPI.VERSION», он говорит, что 2 ... MPI.Get_Version дает (2,1), что соответствует (Version, Subversion). Im очень запутан, так как последняя версия - 1.3. Что ... –

+0

Может быть, 'MPI.Version' сообщает вам версию подчеркивающей реализации MPI. Вы работаете с MPICH (новейшая версия: 3.0)? или openmpi (1.7)? или ... Что такое вывод 'mpicc -show'? – francis

ответ

0

Возможно, вы используете более старую версию. Использовать 1.3.1 не 1.2.x. Проверьте номер версии mpi4py.__version__. Если вы используете или новее, вы можете перегрузить dumps и loads с сериализацией от dill или cloudpickle или другим пользовательским сериализатором.

>>> import mpi4py 
>>> mpi4py.__version__ 
'1.3.1' 
2

В версии 2.0 вы можете изменить его с помощью

MPI.pickle.dumps = dill.dumps 
MPI.pickle.loads = dill.loads 

кажется, что документация еще с 2012 года

Update Для v3.0 см here, а именно:

MPI.pickle.__init__(dill.dumps, dill.loads) 
Смежные вопросы