title: How do you set a timeout in Python's gRPC Library
body: <p>I have a grpc server / client that today will occasionally hang, causing issues. This is being called from a Flask application which is checking in with a background worker process to make sure it's alive / functioning. To make the request to the gRPC server, I have:</p>
  
  <pre><code>try:
          health = self.grpc_client.Health(self.health_ping)
          if health.message == u'PONG':
              return {
                  u'healthy': True,
                  u'message': {
                      u'healthy': True,
                      u'message': u'success'
                  },
                  u'status_code': 200
              }
  except Exception as e:
          if str(e.code()) == u'StatusCode.UNAVAILABLE':
              return {
                  u'healthy': False,
                  u'message': {
                      u'healthy': False,
                      u'message': (u'[503 Unavailable] connection to worker '
                                   u'failed')},
                  u'status_code': 200}
          elif str(e.code()) == u'StatusCode.INTERNAL':
              return {
                  u'healthy': False,
                  u'message': {
                      u'healthy': False,
                      u'message': (u'[500 Internal] worker encountered '
                                   u'an error while responding')},
                  u'status_code': 200}
          return {
              u'healthy': False,
              u'message': {u'healthy': False, u'message': e.message},
              u'status_code': 500
          }
  </code></pre>
  
  <p>the client is a stub:</p>
  
  <pre><code>channel = grpc.insecure_channel(address)
  stub = WorkerStub(channel)
  return stub
  </code></pre>
  
  <p>the proto is:</p>
  
  <pre><code>syntax = "proto3";
  
  option java_multiple_files = true;
  option java_package = "com.company.project.worker";
  option java_outer_classname = "ProjectWorker";
  option objc_class_prefix = "PJW";
  
  package projectworker;
  
  service Worker {
    rpc Health (Ping) returns (Pong) {}
  }
  
  // The request message containing PONG
  message Ping {
    string message = 1;
  }
  
  // The response message containing PONG
  message Pong {
    string message = 1;
  }
  </code></pre>
  
  <p>Using this code, how would I then add a timeout to ensure that I can always respond rather than fail and hang?</p>