Вопрос слишком расплывчат.
То, что вы хотите использовать все процессоры, подразумевает, что вы хотите получить конечный результат как можно быстрее, но основной проблемой для производительности для нескольких экземпляров будет конкуренция за ресурсы (снижение производительности) и кэширование (повышение производительности).
Обычно распределение работы между несколькими процессами обычно дает результаты быстрее. И есть много, много способов распределения нагрузки. Но, не зная намного больше о том, что он делает, сложно рекомендовать конкретный подход.
Учитывая, что у вас есть 8 ЦП, и при условии, что единственным ограниченным ресурсом является ЦП, вы не хотите, чтобы в работе одновременно выполнялось более 8 потоков. Таким образом, проблема заключается в том, как вы планируете работу, чтобы обеспечить оптимальное использование 8 ядер. Разделив работу на 8 сценариев и выполнив их одновременно, вы первоначально увидите, что все 8 сценариев работают одновременно - но вполне вероятно, что сценарии завершатся в разное время в зависимости от характера работы.
Таким образом, если вы действительно хотите оптимально использовать аппаратное обеспечение, это означает запуск 8 процессов в качестве демонов, предпочтительно с каждым процессом с установленным сродством к процессору, который подается из очереди сообщений. Но действительно ли стоит кодировать все это, если вы не собираетесь запускать это регулярно? Также может быть быстрее запустить всего 7 и сохранить ЦП для обработки очереди и других требований, предъявляемых к коробке.