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))
def _get_next_task_id(redis, queue, timeout=1): return redis.brpoplpush(get_pending_list_key(queue), get_executing_list_key(queue), timeout=timeout)