class_docstr: A gRPC service server for updating remote job info to MLMD.
  
  Attributes:
    local_address: Local network address to the server.
    address: Remote network address to the server, same as local_address if not
             configured.
class_docstr_tok: ["A","gRPC","service","server","for","updating","remote","job","info","to","MLMD",".","Attributes",":","local_address",":","Local","network","address","to","the","server",".","address",":","Remote","network","address","to","the","server",",","same","as","local_address","if","not","configured","."]
docstr: Creates a gRPC server and add `self` on to it.
docstr_tok: ["Creates","a","gRPC","server","and","add","`","self","`","on","to","it","."]
code: def _create_server(self):
      """Creates a gRPC server and add `self` on to it."""
      result = grpc.server(futures.ThreadPoolExecutor())
      execution_watcher_pb2_grpc.add_ExecutionWatcherServiceServicer_to_server(
          self, result
      )
      if self._creds is None:
          result.add_insecure_port(self.local_address)
      else:
          result.add_secure_port(self.local_address, self._creds)
      return result
  
file_path: tfx/tfx/orchestration/portable/execution_watcher.py
imports: from concurrent import futures
  from typing import Optional
  from absl import logging
  import grpc
  from tfx.orchestration import metadata
  from tfx.proto.orchestration import execution_watcher_pb2
  from tfx.proto.orchestration import execution_watcher_pb2_grpc
  from ml_metadata.proto import metadata_store_pb2
label_desc: Use image node_id 3 for calling the ExecutionWatcher obj's underlying member method code with example usage: obj._create_server() and returns: result