code: def product_request(self, product, subjects):
      
      request = self.execution_request([product], subjects)
      returns, throws = self.execute(request)
  
      # Throw handling.
      if throws:
        unique_exceptions = tuple({t.exc for _, t in throws})
        self._trace_on_error(unique_exceptions, request)
  
      # Everything is a Return: we rely on the fact that roots are ordered to preserve subject
      # order in output lists.
      return [ret.value for _, ret in returns]
docs: Executes a request for a single product for some subjects, and returns the products.
  
      :param class product: A product type for the request.
      :param list subjects: A list of subjects or Params instances for the request.
      :returns: A list of the requested products, with length match len(subjects).