code: def _vispy_process_events(self):
      events = sdl2.ext.get_events()
      while len(events) > 0:
          for event in events:
              _id = event.window.windowID
              if _id in _VP_SDL2_ALL_WINDOWS:
                  win = _VP_SDL2_ALL_WINDOWS[_id]
                  win._on_event(event)
          events = sdl2.ext.get_events()
      for timer in self._timers:
          timer._tick()
      wins = _get_sdl2_windows()
      for win in wins:
          if win._needs_draw:
              win._needs_draw = False
              win._on_draw()
  
imports: from __future__ import division
  import atexit
  import ctypes
  from time import sleep
  import warnings
  import gc
  from ..base import BaseApplicationBackend, BaseCanvasBackend, BaseTimerBackend
  from ...util import keys, logger
  from ...util.ptime import time
  from ...None import config
label_desc: Use image node_id 4 for calling the ApplicationBackend obj's underlying member method code with example usage: obj._vispy_process_events() without return types