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()