Не существует такого понятия, как «многопроцессорное» или «многоядерное» программирование. Различие между «многопроцессорным» и «многоядерным» компьютерами , вероятно, не имеет отношения к вам как к прикладному программисту; это связано с тонкостями того, как ядра разделяют доступ к памяти.
Чтобы воспользоваться преимуществами многоядерного (или многопроцессорного) компьютера, вам нужна программа, написанная таким образом, чтобы ее можно было запускать параллельно, и среда выполнения, которая позволит программе фактически выполняться параллельно на нескольких ядра (и операционная система, хотя любая операционная система, которую вы можете запустить на вашем ПК, сделает это). Это действительно параллельное программирование, хотя существуют разные подходы к параллельному программированию. Те, которые имеют отношение к Python, являются многопроцессорными и многопоточными.
В таких языках, как C, C ++, Java и C #, вы можете писать параллельные программы, выполняя несколько потоков. Глобальная блокировка интерпретатора в средах выполнения CPython и PyPy исключает эту опцию; но только для тех времен выполнения. (По моему личному мнению, многопоточность опасна и хитра , и, как правило, хорошо, что Python рекомендует вам не рассматривать это как способ получить преимущество в производительности.)
Если вы хотите написать параллельную программу, которая может работать на нескольких ядрах в Python, у вас есть несколько вариантов:
- Напишите многопоточную программу, используя модуль
threading
, и запустите ее во время выполнения IronPython или Jython.
- Используйте модуль
processing
(теперь включен в Python 2.6 как модуль multiprocessing
), чтобы запускать код в нескольких процессах одновременно.
- Используйте модуль
subprocess
для запуска нескольких интерпретаторов Python и обмена данными между ними.
- Используйте Витой и Ампулу . Это дает преимущество не только в том, что ваш код выполняется в разных процессах, но и (если вы не предоставляете доступ к таким вещам, как файлы), возможно, на разных компьютерах.
Независимо от того, какой из этих вариантов вы выберете, вам нужно будет понять, как разделить работу, выполняемую вашей программой, на куски, которые имеет смысл разделять. Поскольку я не уверен, о каких программах вы думаете писать, было бы сложно привести полезный пример.