code: async def acquire(self, command=None, args=()):
          
          if self.closed:
              raise PoolClosedError("Pool is closed")
          async with self._cond:
              if self.closed:
                  raise PoolClosedError("Pool is closed")
              while True:
                  await self._fill_free(override_min=True)
                  if self.freesize:
                      conn = self._pool.popleft()
                      assert not conn.closed, conn
                      assert conn not in self._used, (conn, self._used)
                      self._used.add(conn)
                      return conn
                  else:
                      await self._cond.wait()
docs: Acquires a connection from free pool.
  
          Creates new connection if needed.