code: def end_span(self, *args, **kwargs):
          
          cur_span = self.current_span()
          if cur_span is None and self._spans_list:
              cur_span = self._spans_list[-1]
  
          if cur_span is None:
              logging.warning('No active span, cannot do end_span.')
              return
  
          cur_span.finish()
          self.span_context.span_id = cur_span.parent_span.span_id if \
              cur_span.parent_span else None
  
          if isinstance(cur_span.parent_span, trace_span.Span):
              execution_context.set_current_span(cur_span.parent_span)
          else:
              execution_context.set_current_span(None)
  
          with self._spans_list_condition:
              if cur_span in self._spans_list:
                  span_datas = self.get_span_datas(cur_span)
                  self.exporter.export(span_datas)
                  self._spans_list.remove(cur_span)
  
          return cur_span
docs: End a span. Update the span_id in SpanContext to the current span's
          parent span id; Update the current span.