docs: def terminate_with_threads(self, nodes=None):
          """Destroy one or many nodes threaded.
  
          :param   nodes: Nodes to be destroyed.
          :type    nodes: ``list``
  
          :return: List of nodes which failed to terminate.
          :rtype:  ``list``
          """
          if not self.is_connected():
              return None
  
          nodes = nodes or self.nodes
          failed_kill = []
  
          def worker(gce, node):
              self.logger.info("Terminating node: %s", node.name)
              terminated = gce.destroy_node(node)
              if not terminated:
                  failed_kill.append(node)
  
          threads = []
          for node in nodes:
              thread = threading.Thread(target=worker, args=(self.gce, node))
              threads.append(thread)
              thread.start()
  
          self.logger.info("Waiting for nodes to shut down ...")
          for thread in threads:
              thread.join()
  
          return failed_kill