code: def start_span(self, request, headers, peer_host, peer_port):
          
          parent_context = None
          # noinspection PyBroadException
          try:
              if headers and hasattr(headers, 'iteritems'):
                  tracing_headers = {
                      k[len(TRACING_KEY_PREFIX):]: v
                      for k, v in headers.iteritems()
                      if k.startswith(TRACING_KEY_PREFIX)
                  }
                  parent_context = self.tracer.extract(
                      format=opentracing.Format.TEXT_MAP,
                      carrier=tracing_headers
                  )
                  if self.span and parent_context:
                      # we already started a span from Tracing fields,
                      # so only copy baggage from the headers.
                      for k, v in parent_context.baggage.iteritems():
                          self.span.set_baggage_item(k, v)
          except:
              log.exception('Cannot extract tracing span from headers')
          if self.span is None:
              self.span = self.tracer.start_span(
                  operation_name=request.endpoint,
                  child_of=parent_context,
                  tags={tags.SPAN_KIND: tags.SPAN_KIND_RPC_SERVER},
              )
          if 'cn' in request.headers:
              self.span.set_tag(tags.PEER_SERVICE, request.headers['cn'])
          if peer_host:
              self.span.set_tag(tags.PEER_HOST_IPV4, peer_host)
          if peer_port:
              self.span.set_tag(tags.PEER_PORT, peer_port)
          if 'as' in request.headers:
              self.span.set_tag('as', request.headers['as'])
          return self.span
docs: Start a new server-side span. If the span has already been started
          by `start_basic_span`, this method only adds baggage from the headers.
  
          :param request: inbound tchannel.tornado.request.Request
          :param headers: dictionary containing parsed application headers
          :return: