Get the highest-priority item out of this queue.

        Returns the item, or None if no items are available.  The item
        must be either ``return_item()`` or ``renew_item()`` before
        ``expiration`` seconds pass, or it will become available to
        future callers.  The item will be marked as being owned by
        ``worker_id``.

def check_out_item(self, expiration):
        """Get the highest-priority item out of this queue.

        Returns the item, or None if no items are available.  The item
        must be either ``return_item()`` or ``renew_item()`` before
        ``expiration`` seconds pass, or it will become available to
        future callers.  The item will be marked as being owned by
        ``worker_id``.

        """
        conn = redis.StrictRedis(connection_pool=self.pool)
        self._run_expiration(conn)
        expiration += time.time()
        script = conn.register_script("""
        local item = redis.call("zrevrange", KEYS[1], 0, 0)
        if #item == 0 then return nil end
        item = item[1]
        redis.call("zrem", KEYS[1], item)
        redis.call("zadd", KEYS[2], ARGV[1], item)
        redis.call("hset", KEYS[3], "i" .. item, "w" .. ARGV[2])
        redis.call("hset", KEYS[3], "w" .. ARGV[2], "i" .. item)
        return item
        """)
        result = script(keys=[self._key_available(), self._key_expiration(),
                              self._key_workers()],
                        args=[expiration, self._get_worker_id(conn)])
        return result