Есть несколько вещей, о которых нам нужно помнить
Ускорение количества процессов не ограничивается количеством ядер в вашей системе, но ulimit
для вашего идентификатора пользователя в вашей системе, который контролирует общее количество процессов, запускаемых вашим идентификатором пользователя.
Количество ядер определяет, сколько из этих запущенных процессов может одновременно выполняться параллельно.
Сбой вашей системы может быть из-за того, что ваша целевая функция, на которой работают эти процессы, выполняет что-то тяжелое и ресурсоемкое, с чем система не может справиться, если одновременно запущено несколько процессов, или ограничение nprocs
на система исчерпала себя, и теперь ядро не может вращать новые системные процессы.
При этом не рекомендуется создавать до 2000 процессов, даже если у вас есть 16-ядерный компьютер Intel Skylake, потому что создание нового процесса в системе не является легкой задачей, потому что есть количество вещей, таких как генерация pid, выделение памяти, генерация адресного пространства, планирование процесса, переключение контекста и управление всем его жизненным циклом, которые происходят в фоновом режиме. Так что ядру сложно выполнить новый процесс,
К сожалению, я предполагаю, что вы пытаетесь выполнить задачу, связанную с процессором, и, следовательно, ограниченную аппаратным обеспечением, установленным на вашем компьютере. Вращение большего количества процессов, чем количество ядер в вашей системе, не поможет, но создание пула процессов может помочь. Таким образом, в основном вы хотите создать пул с таким количеством процессов, сколько у вас есть ядер в системе, а затем передать входные данные в пул. Как то так
def target_func(data):
# process the input data
with multiprocessing.pool(processes=multiprocessing.cpu_count()) as po:
res = po.map(f, regressionTuple)