Como enviar uma função para um objeto Pyro remoto
Eu estou tentando configurar algum código usando o Pyro para processar funções de código python em um host remoto e obter resultados de volta. Depois de iniciar o servidor de nomes, eu iria executar este código no host remoto (na verdade, ainda no localhost):
import Pyro4
class Server(object):
def evaluate(self, func, args):
return func(*args)
def main():
server = Server()
Pyro4.Daemon.serveSimple(
{
server: "server"
},
ns=True)
if __name__ == '__main__':
main()
No lado do cliente eu tenho esse código, que é um exemplo do comportamento que estou tentando configurar.
import Pyro4
remoteServer = Pyro4.Proxy('PYRONAME:server')
def square(x):
return x**2
print remoteServer.evaluate(square, 4)
No entanto, esse código resulta na seguinte exceção:
/usr/lib/python2.7/site-packages/Pyro4/core.py:155: UserWarning: HMAC_KEY not set,
protocol data may not be secure
warnings.warn("HMAC_KEY not set, protocol data may not be secure")
Traceback (most recent call last):
File "/home/davide/Projects/rempy/example-api-pyro.py", line 7, in <module>
print remoteServer.evaluate(square, 4)
File "/usr/lib/python2.7/site-packages/Pyro4/core.py", line 149, in __call__
return self.__send(self.__name, args, kwargs)
File "/usr/lib/python2.7/site-packages/Pyro4/core.py", line 289, in _pyroInvoke
raise data
AttributeError: 'module' object has no attribute 'square'
Parece-me que o objeto de função é decapado corretamente e é enviado para a instância do servidor no host remoto, mas há algum problema no namespace.
Como posso resolver este problema?
obrigado