class_docstr: Extend Dask's scheduler with routes to handle PubSub machinery
code: def add_publisher(self, name=None, worker=None):
      logger.debug("Add publisher: %s %s", name, worker)
      self.publishers[name].add(worker)
      return {
          "subscribers": {addr: {} for addr in self.subscribers[name]},
          "publish-scheduler": name in self.client_subscribers
          and len(self.client_subscribers[name]) > 0,
      }
  
imports: from __future__ import annotations
  import asyncio
  import logging
  import threading
  import weakref
  from collections import defaultdict, deque
  from dask.utils import parse_timedelta
  from distributed.core import CommClosedError
  from distributed.metrics import time
  from distributed.protocol.serialize import to_serialize
  from distributed.utils import TimeoutError, sync, wait_for
label_desc: Use image node_id 2 for calling the PubSubSchedulerExtension obj's underlying member method code with example usage: obj.add_publisher(name, worker) and returns: dict