def get(self):
        """Gets the next item from the queue.

        Returns a Future that resolves to the next item once it is available.
        """
        io_loop = IOLoop.current()
        new_get = Future()

        with self._lock:
            get, self._get = self._get, new_get

        answer = Future()

        def _on_node(future):
            if future.exception():  # pragma: no cover (never happens)
                return answer.set_exc_info(future.exc_info())

            node = future.result()
            value = node.value
            new_hole, node.next = node.next, None
            new_get.set_result(new_hole)
            answer.set_result(value)

        def _on_get(future):
            if future.exception():  # pragma: no cover (never happens)
                return answer.set_exc_info(future.exc_info())

            hole = future.result()
            io_loop.add_future(hole, _on_node)

        io_loop.add_future(get, _on_get)
        return answer
Gets the next item from the queue.

        Returns a Future that resolves to the next item once it is available.