Внутренние элементы ThreadPoolExecutor - PullRequest
2 голосов
/ 13 февраля 2012

Я использую concurrent.futures 'класс ThreadPoolExecutor для проведения стресс-тестирования в веб-сервисе.

Насколько я понимаю, параметры конструктора max_workers сообщают исполнителю, какое максимальное количество потоков будет в пуле. В любом случае, есть ли гарантия, что это число будет эффективно использовано, или оно может быть меньше (например, из-за некоторых аппаратных ограничений), чем это?

Если так, есть ли способ узнать, сколько рабочих потоков будет эффективно создано?

1 Ответ

2 голосов
/ 13 февраля 2012

из документа

    Args:
        max_workers: The maximum number of threads that can be used to
            execute the given calls.

из кода _adjust_thread_count (), кажется, новый поток создается по требованию и ограничен max_workers.

    if len(self._threads) < self._max_workers:
        t = threading.Thread(target=_worker,
                             args=(weakref.ref(self, weakref_cb),
                                   self._work_queue))

также, похоже, len(self._threads) для эффективно созданных экземпляров.

...