[Це мій перший пост, і я сподіваюся, що я не повністю зрозумів використання 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 Гб пам'яті, і це працювало надзвичайно добре. Спільні масиви можна обробляти за допомогою мультипроцесора. Масив або спільні типи . Ви можете знайти тут документацію Python - перевіртеФайл library.pdf . У мене є слайди, що пояснюють деякі основні частини цього, - примчайте мене, якщо ви хочете їх.
Якщо у вас є конфігурація кластера з розподіленою пам'яттю, я вважаю, що mpi4py , ймовірно, є кращим інструментом. Я сам цього не використовував, але знаю, що він багато використовується в паралельному програмуванні Python.