code: async def release(self, connection, *, timeout=None):
          
          if (type(connection) is not PoolConnectionProxy or
                  connection._holder._pool is not self):
              raise exceptions.InterfaceError(
                  'Pool.release() received invalid connection: '
                  '{connection!r} is not a member of this pool'.format(
                      connection=connection))
  
          if connection._con is None:
              # Already released, do nothing.
              return
  
          self._check_init()
  
          # Let the connection do its internal housekeeping when its released.
          connection._con._on_release()
  
          ch = connection._holder
          if timeout is None:
              timeout = ch._timeout
  
          # Use asyncio.shield() to guarantee that task cancellation
          # does not prevent the connection from being returned to the
          # pool properly.
          return await asyncio.shield(ch.release(timeout), loop=self._loop)
docs: Release a database connection back to the pool.
  
          :param Connection connection:
              A :class:`~asyncpg.connection.Connection` object to release.
          :param float timeout:
              A timeout for releasing the connection.  If not specified, defaults
              to the timeout provided in the corresponding call to the
              :meth:`Pool.acquire() <asyncpg.pool.Pool.acquire>` method.
  
          .. versionchanged:: 0.14.0
              Added the *timeout* parameter.