code: def create_application(self, blocking: bool = True) -> str:
      if len(self.applications) == self.max_applications:
          app_to_delete = self.applications.pop()
          serve.delete(app_to_delete)
  
      new_name = "".join(
          [random.choice(string.ascii_letters) for _ in range(10)]
      )
  
      @serve.deployment(name=new_name)
      def handler(self, *args):
          logging.getLogger("ray.serve").setLevel(logging.ERROR)
          return new_name
  
      if blocking:
          ray.get(self.random_killer.spare.remote(new_name))
          serve.run(
              handler.bind(),
              name=new_name,
              route_prefix=f"/{new_name}",
              _blocking=True,
          )
          self.applications.append(new_name)
          ray.get(self.random_killer.stop_spare.remote(new_name))
      else:
          serve.run(
              handler.bind(),
              name=new_name,
              route_prefix=f"/{new_name}",
              _blocking=False,
          )
          self.applications.append(new_name)
  
      return new_name
  
imports: import asyncio
  import logging
  import os
  import random
  import string
  import time
  from typing import List
  import requests
  import ray
  from ray import serve
  from ray.serve.context import _get_global_client
  from ray.cluster_utils import Cluster
  from ray._private.test_utils import safe_write_to_results_json
label_desc: Use image node_id 3 for calling the RandomTest obj's underlying member method code with example usage: obj.create_application(blocking) and returns: new_name, new_name