class WaitPool(PoolInterface): def __init__(self, pool_size=1000, queue_size=1000): self._pool_size = int(pool_size) self._queue_size = int(queue_size) self._pool = GreenPool(self._pool_size) self._max_job_id = '' def can_spawn(self, job_id): if job_id <= self._max_job_id: return True if self._pool.free() > 0 or self._pool.waiting() < self._queue_size: self._max_job_id = job_id return True return False def _spawn(self, function, *args, **kwargs): return self._pool.spawn(function, *args, **kwargs)