code: def write_results(self):
      if self._table is None:
          return
  
      logging.debug("Writing results to `benchmark-python.arrow`")
      if not os.path.exists(os.path.dirname(ARROW_PATH)):
          os.makedirs(os.path.dirname(ARROW_PATH))
  
      with open(ARROW_PATH, "wb") as file:
          arrow = self._table.view().to_arrow(compression=None)
          file.write(arrow)
  
      html_path = os.path.join(
          os.path.dirname(__file__), "benchmark-python.html"
      )
      out_path = os.path.join(
          os.path.dirname(ARROW_PATH), "benchmark-python.html"
      )
      with open(html_path, "r") as input:
          with open(out_path, "w") as output:
              output.write(input.read())
  
      self._WROTE_RESULTS = True
  
imports: import logging
  import os
  import sys
  import signal
  import subprocess
  import venv
  import tornado
  from timeit import timeit
  from perspective import Table, PerspectiveManager, PerspectiveTornadoHandler
label_desc: Use image node_id 4 for calling the Runner obj's underlying member method code with example usage: obj.write_results() without return types