Запускать потоки Python на нескольких ядрах

Я знаю, что Python 2.7 не позволяет запускать несколько потоков на разных ядрах, и вам нужно использовать модуль multiprocessing для достижения некоторой степени параллелизма. Я смотрел модуль concurrent.futures в Python 3.4. Позволяет ли использование ThreadPoolExecutor запускать разные потоки в разных процессах или все еще связано ограничениями GIL? Если нет, есть ли способ запуска потоков на разных процессорах с использованием Python 3.4?

В моем случае использование нескольких процессов абсолютно невозможно.


person Diptesh Chatterjee    schedule 24.06.2014    source источник
comment
просто любопытно - при каких обстоятельствах несколько процессов были бы абсолютно невозможны?   -  person Roberto    schedule 25.06.2014
comment
Предположим, вы работаете со встроенной системой с очень небольшим объемом памяти. Не очень хорошая идея создавать там несколько процессов, верно? Хотя я согласен с тем, что Python тоже не должен быть предпочтительным языком. Это всего лишь небольшой эксперимент, который я провожу.   -  person Diptesh Chatterjee    schedule 25.06.2014


Ответы (1)


Нет. ThreadPoolExector — это просто класс, помогающий планировать работу с несколькими потоками. Все обычные ограничения потока остаются в силе.

Чтобы прояснить некоторую путаницу, потоки будут выполняться на разных процессорах/ядрах по выбору операционной системы, они просто не будут работать одновременно. Исключением является то, что некоторые функции на основе C временно освобождают GIL при выполнении действий, не требующих блокировки.

person tdelaney    schedule 24.06.2014
comment
Спасибо. Это отлично отвечает на вопрос !! - person Diptesh Chatterjee; 25.06.2014