class Worker(Process): def __init__(self, task_q, host, port, shard_num, cmd, params, kwargs): super(Worker, self).__init__() self.daemon = True self.task_q = task_q self.params = dict(params) self.kwargs = dict(kwargs) if shard_num: self.r = ReliableShard(collection='test{}'.format(shard_num), db='test') self.r.set_patterns(PATTERNS) self.shard = True else: self.r = Redis(host=host, port=port, db='test') self.shard = False self.cmd = cmd def run(self): param = [] count = 0 f = self.r.__getattribute__(self.cmd) while True: # s = time.time() task_idx = self.task_q.get(True) count += 1 if self.cmd not in self.params.keys(): raise ParamsError("There are no params for '{}' command.".format(self.cmd)) if self.params.get(self.cmd, None): param = self.params[self.cmd][task_idx] if self.kwargs.get(self.cmd, None): kwargs = self.kwargs[self.cmd] else: kwargs = {} f(*param, **kwargs) # INFO("One task: {}".format(time.time() - s)) # INFO("{}::Count: {}".format(self.name, count)) self.task_q.task_done()
class Redisns(object): key_commands = [ 'set', '__setitem__', 'get', '__getitem__', 'getset', 'incr', 'decr', 'exists', 'delete', 'get_type', 'keys', 'ttl', 'expire', 'push', 'llen', 'lrange', 'ltrim', 'lindex', 'pop', 'lset', 'lrem', 'sort', 'sadd', 'srem', 'spop', 'scard', 'sismember', 'smembers', 'srandmember', 'zadd', 'zrem', 'zrange', 'zrangebyscore', 'zcard', 'zscore', 'move' ] mkeys_commands = [ 'mget', 'rename', 'poppush', 'smove', 'sinter', 'sinterstore', 'sunion', 'sunionstore', 'sdiff', 'sdiffstore', ] def __init__(self, namespace=None, *args, **kwargs): if namespace and not namespace.endswith(":"): namespace += ":" self.namespace = namespace self._db = Redis(*args, **kwargs) def __getattr__(self, attr): if not hasattr(self._db, attr): raise AttributeError("'Redis' class has no attribute '%s'" % attr) @wraps(self._db.__getattribute__(attr)) def missing_method(*args, **kwargs): args = list(args) if attr in Redisns.key_commands: args[0] = "{0}{1}".format(self.namespace, args[0]) elif attr in Redisns.mkeys_commands: for arg in range(len(args)): args[arg] = "{0}{1}".format(self.namespace, args[arg]) return self._db.__getattribute__(attr)(*args, **kwargs) return missing_method def __getitem__(self, attr): return self.get(attr) def __setitem__(self, attr, value): return self.set(attr, value) def __delitem__(self, attr): return self.delete(attr)