class_docstr: The client monitor watches the cluster status.
  
  Attributes:
      status (dict): A dict to store workers status and clients status.
class_docstr_tok: ["The","client","monitor","watches","the","cluster","status",".","Attributes",":","status","(","dict",")",":","A","dict","to","store","workers","status","and","clients","status","."]
docstr: Drop client status when it exits.
  
  Args:
      client_address (str): IP address of the exited client.
docstr_tok: ["Drop","client","status","when","it","exits",".","Args",":","client_address","(","str",")",":","IP","address","of","the","exited","client","."]
code: def drop_client_status(self, client_address):
      """Drop client status when it exits.
  
      Args:
          client_address (str): IP address of the exited client.
      """
      self.lock.acquire()
      if client_address in self.status["clients"]:
          self.status["clients"].pop(client_address)
      self.lock.release()
  
file_path: PARL/parl/remote/cluster_monitor.py
imports: import cloudpickle
  import threading
  from collections import defaultdict, deque
  from parl.utils import to_str
label_desc: Use image node_id 7 for calling the ClusterMonitor obj's underlying member method code with example usage: obj.drop_client_status(client_address) without return types