def make(cls, **kw): if 'rate_limit' in kw and kw['rate_limit']: kw['rate_limit'] = timeutils.rate(kw['rate_limit']) for key in ('capacity',): if key in kw and not kw[key]: del kw[key] groupqueue = KTokenBucketGroupQueue(**kw) else: for key in ('rate_limit', 'capacity'): if key in kw: del kw[key] groupqueue = KFastGroupQueue(**kw) return groupqueue
def update_bucket_for_type(self, task_name): task_type = self.task_registry[task_name] rate_limit = getattr(task_type, "rate_limit", None) rate_limit = timeutils.rate(rate_limit) task_queue = FastQueue() if task_name in self.buckets: task_queue = self._get_queue_for_type(task_name) else: task_queue = FastQueue() if rate_limit: task_queue = TokenBucketQueue(rate_limit, queue=task_queue) self.buckets[task_name] = task_queue return task_queue
def add_task_type(self, name): task_type = self.task_registry[name] limit = getattr(task_type, "rate_limit", None) limit = timeutils.rate(limit) bucket = self.buckets[name] = TokenBucket(limit, capacity=1) if limit else None return bucket