code: def find_path(self, start, end, grid):
          
          self.start_time = time.time()  # execution time limitation
          self.runs = 0  # count number of iterations
          start.opened = True
  
          open_list = [start]
  
          while len(open_list) > 0:
              self.runs += 1
              self.keep_running()
  
              path = self.check_neighbors(start, end, grid, open_list)
              if path:
                  return path, self.runs
  
          # failed to find path
          return [], self.runs
docs: find a path from start to end node on grid by iterating over
          all neighbors of a node (see check_neighbors)
          :param start: start node
          :param end: end node
          :param grid: grid that stores all possible steps/tiles as 2D-list
          :return: