class_docstr: Tracks progress of a set of keys or futures
  
  On creation we provide a set of keys or futures that interest us as well as
  a scheduler.  We traverse through the scheduler's dependencies to find all
  relevant keys on which our keys depend.  We then plug into the scheduler to
  learn when our keys become available in memory at which point we record
  their completion.
  
  State
  -----
  keys: set
      Set of keys that are not yet computed
  all_keys: set
      Set of all keys that we track
  
  This class performs no visualization.  However it is used by other classes,
  notably TextProgressBar and ProgressWidget, which do perform visualization.
class_docstr_tok: ["Tracks","progress","of","a","set","of","keys","or","futures","On","creation","we","provide","a","set","of","keys","or","futures","that","interest","us","as","well","as","a","scheduler",".","We","traverse","through","the","scheduler","'s","dependencies","to","find","all","relevant","keys","on","which","our","keys","depend",".","We","then","plug","into","the","scheduler","to","learn","when","our","keys","become","available","in","memory","at","which","point","we","record","their","completion",".","State","--","--","-","keys",":","set","Set","of","keys","that","are","not","yet","computed","all_keys",":","set","Set","of","all","keys","that","we","track","This","class","performs","no","visualization",".","However","it","is","used","by","other","classes",",","notably","TextProgressBar","and","ProgressWidget",",","which","do","perform","visualization","."]
code: def stop(self, exception=None, key=None):
      if self.name in self.scheduler.plugins:
          self.scheduler.remove_plugin(name=self.name)
      if exception:
          self.status = "error"
          self.extra.update(
              {
                  "exception": self.scheduler.tasks[key].exception,
                  "key": key,
              }
          )
      else:
          self.status = "finished"
      logger.debug("Remove Progress plugin")
  
imports: from __future__ import annotations
  import asyncio
  import logging
  import warnings
  from collections import defaultdict
  from timeit import default_timer
  from typing import ClassVar
  from tlz import groupby, valmap
  from dask.base import tokenize
  from dask.utils import key_split
  from distributed.diagnostics.plugin import SchedulerPlugin
  from distributed.metrics import time
label_desc: Use image node_id 4 for calling the Progress obj's underlying member method code with example usage: obj.stop(exception, key) without return types