Pergunta

Estou tendo um problema com o PyRO e é estranho porque pyro-ns (o servidor de nomes) está em execução.Então veja aqui abaixo o erro:

[127.0.0.1] out: name server <Pyro.naming.NameServerProxy object at 0x1983990>
[127.0.0.1] out: Traceback (most recent call last):
[127.0.0.1] out:   File "/var/tmp/UINX_rileva_temperatura.py", line 72, in <module>
[127.0.0.1] out:     __avvia_pyro_server(cpu, cpu_name, event)
[127.0.0.1] out:   File "/var/tmp/UINX_rileva_temperatura.py", line 58, in __avvia_pyro_server
[127.0.0.1] out:     URI = daemon.connect(PyroObj, name)
[127.0.0.1] out:   File "/usr/lib/pymodules/python2.7/Pyro/core.py", line 696, in connect
[127.0.0.1] out:     self.NameServer.register(name, URI)
[127.0.0.1] out:   File "/usr/lib/pymodules/python2.7/Pyro/naming.py", line 229, in register
[127.0.0.1] out:     return self.__remoteinvoc('register',0,_expandName(name),URI)
[127.0.0.1] out:   File "/usr/lib/pymodules/python2.7/Pyro/naming.py", line 213, in __remoteinvoc
[127.0.0.1] out:     return self.adapter.remoteInvocation(*args)
[127.0.0.1] out:   File "/usr/lib/pymodules/python2.7/Pyro/protocol.py", line 457, in remoteInvocation
[127.0.0.1] out:     return self._remoteInvocation(method, flags, *args)
[127.0.0.1] out:   File "/usr/lib/pymodules/python2.7/Pyro/protocol.py", line 532, in _remoteInvocation
[127.0.0.1] out:     answer.raiseEx()
[127.0.0.1] out:   File "/usr/lib/pymodules/python2.7/Pyro/errors.py", line 72, in raiseEx
[127.0.0.1] out:     raise self.excObj
[127.0.0.1] out: Pyro.errors.NamingError: ('(parent)group not found', ':Default.127.0.0')

Disconnecting from 127.0.0.1...

E agora o código..É muito simples.

class CPU(Pyro.core.ObjBase):


    def __init__(self):

        Pyro.core.ObjBase.__init__(self)  ## init for the master class 


    def close_pyro_server(self):

        event.set() ## i'm not using this, but it's useful to close this pyro server (not pyro name server!)


def __start_pyro_server(PyroObj, event):

            Pyro.core.initServer() 
            daemon = Pyro.core.Daemon()
            name_server = Pyro.naming.NameServerLocator().getNS() #locate the pyro name server
            print 'name server ' + str(name_server)
            daemon.useNameServer(name_server) #daemon use the pyro name server found

            URI = daemon.connect(PyroObj, name) ## <---- doesn't work !! it would connect an object (child of Pyro.core.ObjBase) with a common name, like 'my_object', it's useful to retrieve the object easily
            daemon.requestLoop(condition = lambda event: False if event.is_set() == True else True) ## pyro server start to work
            daemon.close() ## when the server is out of the loop, let's close it




if __name__ == '__main__':  
    event = threading.Event()
    cpu = CPU()
    __start_pyro_server(cpu, event)
Foi útil?

Solução

A resposta é que um nome de objeto remoto como '192.168.0.1' não funciona.Portanto, devo evitar usar pontos, vírgulas e assim por diante.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top