docstr: Runs each benchmark function from the suite for n `ITERATIONS`,
  timing each function and writing the results to a `perspective.Table`.
docstr_tok: ["Runs","each","benchmark","function","from","the","suite","for","n","`","ITERATIONS","`",",","timing","each","function","and","writing","the","results","to","a","`","perspective.Table","`","."]
code: def run(self, version):
      """Runs each benchmark function from the suite for n `ITERATIONS`,
      timing each function and writing the results to a `perspective.Table`.
      """
      logging.info("Running benchmark suite...")
      for benchmark in self._benchmarks:
          result = self.run_method(benchmark)
          result["version"] = version
          self.print_result(result)
          if self._table is None:
              if os.path.exists(ARROW_PATH):
                  # if arrow exists, append to it
                  with open(ARROW_PATH, "rb") as arr:
                      print(
                          "Reading table from pre-existing benchmark-python.arrow"
                      )
                      self._table = Table(arr.read())
                  self._table.update([result])
              else:
                  print("Creating new table")
                  self._table = Table([result])
          else:
              self._table.update([result])
  
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 7 for calling the Runner obj's underlying member method code with example usage: obj.run(version) without return types