Все потоки выполняются в процессе, из которого они были запущены. В этом случае процесс p1
.
Что касается того, сколько потоков вы можете запустить в процессе, вы должны иметь в виду, что в CPython только один поток единовременно может выполняться Python байт-код . Это обеспечивается глобальной блокировкой интерпретатора («GIL»). Поэтому для заданий, требующих большого количества вычислений, обычно лучше использовать процессы, а не потоки.
Если вы посмотрите документацию для concurrent.futures.ThreadPoolExecutor
, по умолчанию количество рабочих потоков, которые он использует, в пять раз больше. количество физических процессоров. По всей видимости, это разумное количество для тех видов рабочих нагрузок, для которых предназначен ThreadPoolExecutor
.