docstr: The client is ready to start new episode,
  but blocking until training thread call client_ready_event.set()
code: def _new_ready_client(self):
      """The client is ready to start new episode,
      but blocking until training thread call client_ready_event.set()
      """
      client_ready_event = threading.Event()
      self.ready_client_queue.put(client_ready_event)
      logger.info(
          "[new_ready_client] approximate size of ready clients:{}".format(
              self.ready_client_queue.qsize()
          )
      )
      client_ready_event.wait()
  
imports: import grpc
  import json
  import numpy
  import os
  import queue
  import simulator_pb2
  import simulator_pb2_grpc
  import six
  import time
  import threading
  from args import get_server_args
  from collections import defaultdict
  from concurrent import futures
  from multi_head_ddpg import MultiHeadDDPG
  from opensim_agent import OpenSimAgent
  from opensim_model import OpenSimModel
  from parl.utils import logger
  from replay_memory import ReplayMemory
  from utils import calc_indicators, ScalarsManager, TransitionExperience
label_desc: Use image node_id 2 for calling the SimulatorServer obj's underlying member method code with example usage: obj._new_ready_client() without return types