<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 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