docstr: When this span tree finished computing, or current timestamp if it didn't
  finish yet.
  
  Notes
  -----
  This differs from ``TaskGroup.stop`` when there aren't unfinished tasks; is also
  will never be zero.
  
  See Also
  --------
  enqueued
  start
  done
  distributed.scheduler.TaskGroup.stop
docstr_tok: ["When","this","span","tree","finished","computing",",","or","current","timestamp","if","it","didn't","finish","yet",".","Notes","--","--","-","This","differs","from","``","TaskGroup.stop","``","when","there","are","n't","unfinished","tasks",";","is","also","will","never","be","zero",".","See","Also","--","--","--","--","enqueued","start","done","distributed.scheduler.TaskGroup.stop"]
code: def stop(self) -> float:
      """When this span tree finished computing, or current timestamp if it didn't
      finish yet.
  
      Notes
      -----
      This differs from ``TaskGroup.stop`` when there aren't unfinished tasks; is also
      will never be zero.
  
      See Also
      --------
      enqueued
      start
      done
      distributed.scheduler.TaskGroup.stop
      """
      if self.done:
          out = max(tg.stop for tg in self.traverse_groups())
      else:
          out = time()
      # absorb small errors in worker delay calculation, as well as in time() not
      # being perfectly monotonic
      return max(out, self.enqueued)
  
imports: from __future__ import annotations
  import uuid
  import weakref
  from collections import defaultdict
  from collections.abc import Hashable, Iterable, Iterator
  from contextlib import contextmanager
  from itertools import islice
  from typing import TYPE_CHECKING, Any
  import dask.config
  from dask.typing import Key
  from distributed.collections import sum_mappings
  from distributed.itertools import ffill
  from distributed.metrics import time
label_desc: Use image node_id 8 for calling the Span obj's underlying member method code with example usage: obj.stop() and returns: max