2012-02-13 3 views
2

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

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

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

ответ

2

из дока

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) является для эффективного экземпляра.

+0

Действительно, посмотрев на панель Threads ProcessExplorer, кажется, что max_workers всегда соблюдается. Спасибо :) – Simone

Смежные вопросы