docstr: stop the heartbeat server and send the stop_message to the client.
  
  Args:
      stop_tag(byte): tag to inform why stop the heartbeat.
      stop_message(str): error message which will be sent to the client.
docstr_tok: ["stop","the","heartbeat","server","and","send","the","stop_message","to","the","client",".","Args",":","stop_tag","(","byte",")",":","tag","to","inform","why","stop","the","heartbeat",".","stop_message","(","str",")",":","error","message","which","will","be","sent","to","the","client","."]
code: def stop(self, stop_tag, stop_message):
      """stop the heartbeat server and send the stop_message to the client.
  
      Args:
          stop_tag(byte): tag to inform why stop the heartbeat.
          stop_message(str): error message which will be sent to the client.
      """
      self.stop_tag = stop_tag
      self.stop_message = stop_message
  
file_path: PARL/parl/remote/grpc_heartbeat/heartbeat_client.py
imports: import os
  import grpc
  import time
  import threading
  from parl.remote import remote_constants
  from parl.remote.grpc_heartbeat import heartbeat_pb2
  from parl.remote.grpc_heartbeat import heartbeat_pb2_grpc
  from parl.utils import logger
label_desc: Use image node_id 3 for calling the HeartbeatClientThread obj's underlying member method code with example usage: obj.stop(stop_tag, stop_message) without return types