Попытка сериализовать Numpy массив Pyro4 возвращает следующую ошибку типаPyro4 рассол сериализатору NumPy массив
TypeError: don't know how to serialize class <type 'numpy.ndarray'>. Give it vars() or an appropriate __getstate__
Код является следующим
import numpy as np
import Pyro4
# set pickle serializer
Pyro4.config.SERIALIZERS_ACCEPTED = set(['pickle','json', 'marshal', 'serpent'])
@Pyro4.expose
class test(object):
def get_array(self):
return np.random.random((10,10))
def main():
# create a Pyro daemon
daemon = Pyro4.Daemon()
# register test instance
uri = daemon.register(test())
# print uri to connect to it in another console
print uri
# start the event loop of the server to wait for calls
daemon.requestLoop()
if __name__=="__main__":
main()
Теперь открыть другую консоль и попытаться вызвать тест например, следующие
import Pyro4
Pyro4.config.SERIALIZERS_ACCEPTED = set(['pickle','json', 'marshal', 'serpent'])
# connect to URI which is printed above
# must be something like this 'PYRO:[email protected]:57495'
p = Pyro4.Proxy(URI)
p.get_array()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python2.7/site-packages/Pyro4/core.py", line 171, in __call__
return self.__send(self.__name, args, kwargs)
File "/usr/local/lib/python2.7/site-packages/Pyro4/core.py", line 438, in _pyroInvoke
raise data
TypeError: don't know how to serialize class <type 'numpy.ndarray'>. Give it vars() or an appropriate __getstate
Я был здесь раньше, но хочу изменить конфигурацию из кода и не изменять глобальную конфигурационную переменную PYRO_SERIALIZERS_ACCEPTED. Я новичок в пиро, жаль глупых вопросов. – Cobry
Каждый элемент конфигурации (кроме связанного с ведением журнала) может быть установлен как через переменную среды, так и через изменение кода. Обратите внимание, что переменные окружения обычно не являются системными, а для каждого пользователя. В любом случае, вы должны установить Pyro4.config.SERIALIZER = 'pickle' –