def __init__(
        self,
        async_evaluators=None,
        poolsize=4,
        load_factor=0,
        loop=None,
        async_language_session_class=WolframLanguageAsyncSession,
        **kwargs
    ):
        super().__init__(loop)
        if poolsize <= 0:
            raise ValueError("Invalid pool size value %i. Expecting a positive integer." % i)
        self._queue = asyncio.Queue(load_factor * poolsize, loop=self._loop)
        self.async_language_session_class = async_language_session_class
        self._evaluators = set()
        if async_evaluators is None or isinstance(async_evaluators, six.string_types):
            for _ in range(poolsize):
                self._add_evaluator(async_evaluators, **kwargs)
        else:
            if not is_iterable(async_evaluators):
                async_evaluators = itertools.repeat(async_evaluators)
            for evaluator in itertools.cycle(async_evaluators):
                if len(self._evaluators) >= poolsize:
                    break
                self._add_evaluator(evaluator)

        self._started_tasks = []
        self._pending_init_tasks = ()
        self.last = 0
        self.eval_count = 0
        self.requestedsize = poolsize
Beispiel #2
0
def encode(serializer, o):
    if is_iterable(o):
        return serializer.serialize_iterable(map(serializer.encode, o),
                                             length=safe_len(o))
    if serializer.allow_external_objects:
        return serializer.serialize_external_object(o)

    raise NotImplementedError('Cannot serialize object of class %s' %
                              o.__class__)