code: def perspective_thread(manager):
      """Perspective application thread starts its own event loop, and
      adds the table with the name "data_source_one", which will be used
      in the front-end."""
      psp_loop = asyncio.new_event_loop()
      manager.set_loop_callback(psp_loop.call_soon_threadsafe)
      with open(file_path, mode="rb") as file:
          table = Table(file.read(), index="Row ID")
          manager.host_table("data_source_one", table)
      psp_loop.run_forever()
  
file_path: perspective/examples/python-starlette/server.py
imports: import asyncio
  import os
  import os.path
  import logging
  import threading
  import uvicorn
  from fastapi import FastAPI, WebSocket
  from fastapi.middleware.cors import CORSMiddleware
  from starlette.responses import FileResponse
  from starlette.staticfiles import StaticFiles
  from perspective import Table, PerspectiveManager, PerspectiveStarletteHandler
label_desc: Use image node_id 2 for calling a global function with example usage: perspective_thread(manager) without return types