Ejemplo n.º 1
0
def _set_task_finished_no_blocking(redis,
                  queue,
                  task_id,
                  task_hash_key,
                  result=True,
                  result_value=None,
                  error_reason=None,
                  error_exception=None,
                  logger=None):
    results_channel_key = get_results_channel_key()
    executing_list_key = get_executing_list_key(queue)

    task = {TASK_HKEY_STATE: STATE_FINISHED,
            TASK_HKEY_RESULT: result,
            TASK_HKEY_FINISHED_CREATED: strftime(datetime.utcnow())}

    if result_value:
        task[TASK_HKEY_RESULT_VALUE] = result_value

    if error_reason:
        task[TASK_HKEY_ERROR_REASON] = error_reason

    if error_exception:
        task[TASK_HKEY_ERROR_EXCEPTION] = error_exception

    pipe = redis.pipeline(transaction=True)
    pipe.hmset(task_hash_key, task)
    pipe.lrem(executing_list_key, task_id, 0)
    pipe.execute()

    print 'pub ' + results_channel_key + ' ' + task_hash_key
    redis.publish(results_channel_key, task_hash_key)

    if logger:
        logger.info('result:{0}\nresult-value:{1}\nerror-reason:{2}\n'.format(result, result_value, error_reason))
Ejemplo n.º 2
0
def _get_next_task_id(redis, queue, timeout=1):
    return redis.brpoplpush(get_pending_list_key(queue),
                            get_executing_list_key(queue),
                            timeout=timeout)