[Это мой первый пост, и я надеюсь, что я не совсем неправильно понял использование SE - если да, то заранее прошу прощения]
Я согласен с «bgschaid», что на этот вопрос очень сложно ответить на основании предоставленной информации. Это имеет огромное значение, если вы хотите, чтобы низкоуровневые подпрограммы использовали многоядерную архитектуру, или если вам нужно использовать параллелизм для смущающе параллельных проблем - или что-то промежуточное. Обзор различных возможностей параллельных вычислений в Python можно найти здесь .
В первом случае я наверняка рекомендую использовать такие инструменты, как NumPy / SciPy, которые, по крайней мере, в скомпилированной версии MKL от Enthought, поддерживают многоядерные архитектуры. Здесь вы можете контролировать количество ядер для использования через переменную окружения "MKL_NUM_THREADS". Это опирается на высокооптимизированные библиотеки, которые вряд ли можно ожидать превышения производительности. Я считаю, что обычно рекомендуется использовать эти высококачественные и высоко оптимизированные библиотеки, когда это возможно.
Если вы хотите использовать параллелизм на грубом уровне, стандартный многопроцессорный инструмент Python прост в использовании - он также поддерживает общие объекты данных. Существуют различные инструменты для использования в составе пакета многопроцессорной обработки . Я использовал map_async (как SIMD) и apply_async (как MIMD) для нескольких проблем с хорошими результатами. Многопроцессорных пакет довольно прост в использовании и является стандартной частью Python означает , что вы можете ожидать , что другие потенциальные пользователи вашего кода легко быть в состоянии использовать его. многопроцессорная обработка также напрямую связана с объектами данных NumPy. При использовании многопроцессорностиЯ бы порекомендовал вам установить для переменной среды «MKL_NUM_THREADS» значение 1, чтобы в NumPy было разрешено только одно ядро для каждого процесса / рабочего. В противном случае вы могли бы столкнуться с конфликтом ресурсов между параллельной NumPy и многопроцессорной обработкой, что приводит к снижению производительности. Многопроцессорная обработка отлично работает для многопроцессорной / многоядерной архитектуры под той же операционной системой. Я использовал многопроцессорную обработку на компьютере с общей памятью с 4 процессорами Xeon E7-4850 (каждые 10 ядер) и 512 ГБ памяти, и это работало очень хорошо. Совместно используемые массивы могут быть обработаны с помощью многопроцессорной обработки . Array или sharedctypes . Вы можете найти документацию по Python здесь - проверьтефайл library.pdf . У меня есть несколько слайдов, объясняющих некоторые из основных частей этого - напишите мне, если хотите.
Если у вас есть конфигурация кластера с распределенной памятью, я думаю, что mpi4py , вероятно, предпочтительный инструмент. Я сам этим не пользовался, но знаю, что он часто используется в параллельном программировании на Python.