Относительно связи многопроцессорности с ядрами сервера

Для следующего кода, предположим, что у меня 32-ядерная машина, Python решит, сколько процессов создать для меня?

from multiprocessing import Process
for i in range(100):
    p = Process(target=run, args=(fileToAnalyse,))
    p.start()

1 ответ

Нет, это не решает за вас.

Чтобы ограничить количество подпроцессов, вам нужно использовать пул рабочих.

Пример из документации:

from multiprocessing import Pool

def f(x):
    return x*x

if __name__ == '__main__':
    pool = Pool(processes=4)              # start 4 worker processes
    result = pool.apply_async(f, [10])    # evaluate "f(10)" asynchronously
    print result.get(timeout=1)           # prints "100" unless your computer is *very* slow
    print pool.map(f, range(10))          # prints "[0, 1, 4,..., 81]"

Если вы пропустите, processes=4будет использовать multiprocessing.cpu_count которые возвращают количество процессоров.

Другие вопросы по тегам