示例#1
0
def _enqueue_message(redis, logger, msg, message_key, message_hash_key,
                     queue_name):
    timestamp = to_unix(datetime.utcnow())
    pipe = redis.pipeline()
    pipe.set(message_key, msg.serialize())
    pipe.zadd(message_hash_key, {msg.id: timestamp})
    pipe.lpush(queue_name, msg.id)

    if msg.cron_str is not None:
        next_dt = get_next_cron_timestamp(msg.cron_str)
        timestamp = to_unix(next_dt)

        _enqueue_at_timestamp(
            pipe,
            logger,
            msg.queue,
            Queue.get_message_name,
            timestamp,
            msg.category,
            msg.cron_str,
            *msg.args,
            **msg.kwargs,
        )

    return pipe.execute()
示例#2
0
    def enqueue_message(self, message):
        timestamp = to_unix(datetime.utcnow())

        pipe = self.redis.pipeline()
        pipe.set(message.message_key(), message.serialize())
        pipe.zadd(message.message_hash_key(), {message.id: timestamp})
        pipe.lpush(message.queue, message.id)

        if message.cron_str:
            next_dt = get_next_cron_timestamp(message.cron_str)
            timestamp = to_unix(next_dt)
            msg_schedule = Message(message.queue, message.category,
                                   message.cron_str, *message.args,
                                   **message.kwargs)

            self._pipe_at_timestamp(pipe, msg_schedule, timestamp)

        return pipe.execute()
示例#3
0
def test_schedule3(client):
    """Test Scheduling a job with cron"""

    queue = client.application.jobs_queue

    cron_str = "* * * * *"
    timestamp = to_unix(get_next_cron_timestamp(cron_str))

    enqueued_id = queue.enqueue_cron(cron_str,
                                     Categories.Monitor,
                                     "something",
                                     other="öther")

    redis = client.application.redis
    expect(redis.llen(queue.queue_name)).to_equal(0)

    expect(redis.zcard(Queue.SCHEDULED_QUEUE_NAME)).to_equal(1)

    items = redis.zrange(Queue.SCHEDULED_QUEUE_NAME, 0, -1, withscores=True)
    expect(items).to_length(1)

    message_id, actual_ts = items[0]
    expect(actual_ts).to_equal(timestamp)
    expect(message_id).to_equal(enqueued_id)

    message_key = queue.get_message_name(enqueued_id)
    expect(redis.exists(message_key)).to_be_true()

    data = redis.get(message_key)

    job = Message.deserialize(data)
    job = Message.deserialize(data)

    expect(job.id).to_equal(enqueued_id)
    expect(job.category).to_equal(Categories.Monitor)
    expect(job.args).to_length(1)
    expect(job.args[0]).to_equal("something")
    expect(job.kwargs).to_include("other")
    expect(job.kwargs["other"]).to_equal("öther")
示例#4
0
    def enqueue_cron(self, cron, category, *args, **kw):
        next_dt = get_next_cron_timestamp(cron)
        timestamp = to_unix(next_dt)

        return self.__enqueue_at_timestamp(timestamp, category, cron, *args,
                                           **kw)