class_docstr: The dispatcher is responsible for assigning tasks to free workers, report results back to the master and
  communicate to the nameserver.
code: def shutdown_all_workers(self, rediscover=False):
      with self.discover_cond:
          for worker in self.worker_pool.values():
              worker.shutdown()
          if rediscover:
              time.sleep(1)
              self.discover_cond.notify()
  
imports: import threading
  import logging
  import queue
  import time
  import Pyro4
label_desc: Use image node_id 3 for calling the Dispatcher obj's underlying member method code with example usage: obj.shutdown_all_workers(rediscover) without return types