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()
Example #2
0
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)