code: def get(self):
          
          self.lock.acquire()
          try:
              c = self.conn.popleft()
              yield c
          except self.exc_classes:
              # The current connection has failed, drop it and create a new one
              gevent.spawn_later(1, self._addOne)
              raise
          except:
              self.conn.append(c)
              self.lock.release()
              raise
          else:
              # NOTE: cannot use finally because MUST NOT reuse the connection
              # if it failed (socket.error)
              self.conn.append(c)
              self.lock.release()
docs: Get a connection from the pool, to make and receive traffic.
  
          If the connection fails for any reason (socket.error), it is dropped
          and a new one is scheduled. Please use @retry as a way to automatically
          retry whatever operation you were performing.