class_docstr: A collection of callbacks added to a Tornado IOLoop that can be removed
  as a group.
class_docstr_tok: ["A","collection","of","callbacks","added","to","a","Tornado","IOLoop","that","can","be","removed","as","a","group","."]
docstr: Adds a callback to be run once after timeout_milliseconds.
  
  The passed-in ID can be used with remove_timeout_callback.
docstr_tok: ["Adds","a","callback","to","be","run","once","after","timeout_milliseconds",".","The","passed-in","ID","can","be","used","with","remove_timeout_callback","."]
code: def add_timeout_callback(
      self,
      callback: CallbackSync,
      timeout_milliseconds: int,
      callback_id: ID,
  ) -> ID:
      """Adds a callback to be run once after timeout_milliseconds.
  
      The passed-in ID can be used with remove_timeout_callback.
  
      """
  
      def wrapper() -> None:
          self.remove_timeout_callback(callback_id)
          return callback()
  
      handle: object | None = None
  
      def remover() -> None:
          if handle is not None:
              self._loop.remove_timeout(handle)
  
      self._assign_remover(
          callback,
          callback_id,
          self._timeout_callback_removers,
          remover,
      )
      handle = self._loop.call_later(
          timeout_milliseconds / 1000.0, wrapper
      )
      return callback_id
  
imports: from __future__ import annotations
  import logging
  import sys
  import threading
  from collections import defaultdict
  from traceback import format_exception
  from typing import TYPE_CHECKING, Any, Awaitable, Callable, Union
  import tornado
  from tornado import gen
  from ..core.types import ID
label_desc: Use image node_id 8 for calling the _CallbackGroup obj's underlying member method code with example usage: obj.add_timeout_callback(callback, timeout_milliseconds, callback_id) and returns: callback_id, callback