Задержка на стороне сервера брокера twisted перспективы

Я использую Twisted Perspective Broker, чтобы общаться между клиентом и сервером. Клиент запрашивает у сервера удаленный метод remote_ssh. Это заставляет сервер PB инициировать SSH-соединение с использованием библиотеки SSH Paramiko и получать конфигурацию с удаленного устройства.

Все это работает нормально, но когда я выполняю это для нескольких удаленных устройств, я вижу следующее поведение - клиент Perspective Broker отправляет все запросы на сервер PB. Затем сервер PB будет выполнять эти запросы один за другим (что нормально), но он не вернет НИКАКИХ результатов, пока они ВСЕ не будут завершены.

Вот соответствующий код на стороне сервера PB:

class RMethods(pb.Root):

    def remote_ssh(self, aDict):

        self.login('SSH', aDict)        # Login to remote device
        response = self.aSSH.retrieve() # Retrieve the config
        self.aSSH.close()

        return response


if __name__ == "__main__":
    reactor.listenTCP(1885, pb.PBServerFactory(RMethods()))
    reactor.run()

From глядя на различную информацию системного уровня (TCPDump и netstat), я вижу следующее (предположим, 5 вызовов удаленного метода):

Вызов remote_ssh из клиента PB на сервер PB для пяти удаленных устройств происходит примерно в одно и то же время

   self.login device 1
   self.aSSH.retrieve() device 1
   self.aSSH.close() device 1

   self.login device 2
   self.aSSH.retrieve() device 2
   self.aSSH.close() device 2

   ...

   self.login device 5
   self.aSSH.retrieve() device 5
   self.aSSH.close() device 5

   return results for all 5 devices  

] Я не понимаю, почему он ожидает возврата результатов (т.е. почему он ожидает завершения работы устройства 5, прежде чем будут возвращены результаты для устройства 1).

6
задан Kirk Byers 19 August 2011 в 21:40
поделиться