class_docstr: Explicitly coordinate the level Tornado components required to run a
  Bokeh server:
  
  * A Tornado ``IOLoop`` to run the Bokeh server machinery.
  
  * a ``BokehTornado`` Tornado application that defines the Bokeh server
    machinery.
  
  * a Tornado ``HTTPServer`` to direct HTTP requests
  
  All three of these components must be passed to ``BaseServer``, which will
  initialize the ``BokehTornado`` instance on the ``io_loop``. The
  ``http_server`` must have been previously created and initialized with the
  ``BokehTornado`` instance.
docstr: Install the Bokeh Server and its background tasks on a Tornado
  ``IOLoop``.
  
  This method does *not* block and does *not* affect the state of the
  Tornado ``IOLoop``  You must start and stop the loop yourself, i.e.
  this method is typically useful when you are already explicitly
  managing an ``IOLoop`` yourself.
  
  To start a Bokeh server and immediately "run forever" in a blocking
  manner, see :func:`~bokeh.server.server.BaseServer.run_until_shutdown`.
docstr_tok: ["Install","the","Bokeh","Server","and","its","background","tasks","on","a","Tornado","``","IOLoop","``",".","This","method","does","*","not","*","block","and","does","*","not","*","affect","the","state","of","the","Tornado","``","IOLoop","``","You","must","start","and","stop","the","loop","yourself",",","i.e",".","this","method","is","typically","useful","when","you","are","already","explicitly","managing","an","``","IOLoop","``","yourself",".","To","start","a","Bokeh","server","and","immediately","``","run","forever","''","in","a","blocking","manner",",","see",":","func",":","`","~bokeh.server.server.BaseServer.run_until_shutdown","`","."]
code: def start(self) -> None:
      """Install the Bokeh Server and its background tasks on a Tornado
      ``IOLoop``.
  
      This method does *not* block and does *not* affect the state of the
      Tornado ``IOLoop``  You must start and stop the loop yourself, i.e.
      this method is typically useful when you are already explicitly
      managing an ``IOLoop`` yourself.
  
      To start a Bokeh server and immediately "run forever" in a blocking
      manner, see :func:`~bokeh.server.server.BaseServer.run_until_shutdown`.
  
      """
      assert not self._started, "Already started"
      self._started = True
      self._tornado.start()
  
imports: from __future__ import annotations
  import logging
  import atexit
  import signal
  import socket
  import sys
  from types import FrameType
  from typing import TYPE_CHECKING, Any, Mapping
  from tornado import netutil, version
  from tornado.httpserver import HTTPServer
  from tornado.ioloop import IOLoop
  from ..None import __version__
  from ..core import properties
  from ..core.properties import Bool, Int, Nullable, String
  from ..resources import DEFAULT_SERVER_PORT, server_url
  from ..util.options import Options
  from .tornado import DEFAULT_WEBSOCKET_MAX_MESSAGE_SIZE_BYTES, BokehTornado
  from .util import bind_sockets, create_hosts_allowlist
label_desc: Use image node_id 3 for calling the BaseServer obj's underlying member method code with example usage: obj.start() without return types