Это скорее вопрос стиля. Для процессов с привязкой к процессору, которые действительно приносят пользу для нескольких ядер, обычно вы используете модуль мультипроцессорности или используете потоки с интерпретатором, который не имеет GIL? Я использовал библиотеку многопроцессорности только слегка, но также не имею никакого опыта ни с чем, кроме CPython. Мне любопытно, какой предпочтительный подход и если нужно использовать другой интерпретатор, какой именно.Python на многопроцессорных машинах: многопроцессорный или не-GIL-интерпретатор
ответ
я не вижу «стиль» аргумент, чтобы быть здесь, так или иначе - как multiprocessing
в CPython 2.6 и threading
в (например) текущей версии Jython и IronPython, пусть вам код очень похож пути (и стили ;-). Итак, я бы выбрал на основе очень «жестких» соображений - что такое производительность, как с каждым выбором (если я , так что CPU-привязанный, чтобы извлечь выгоду из нескольких ядер, тогда производительность , очевидно, первостепенной важности), могу ли я с серьезной пользой использовать любую библиотеку, которая имеет только CPython (например, numpy
) или, может быть, что-то другое, это только JVM- или .NET- и т. д.
Взгляните на Parallel Python (www.parallelpython.com). Я привык к тому, чтобы хорошо разделить работу между процессорами на четырехъядерном ящике. Он даже поддерживает кластеры!
В идеале вы бы сделали некоторый бенчмаркинг, чтобы определить, сколько процессов Python на процессор может обрабатываться без ухудшения производительности. Я бы начал с трех процессов Python на ядро и работал вверх. –
Какова ваша рабочая нагрузка? С точки зрения «стиля» (который, по-видимому, * очень важен для программистов python), я не думаю, что многие сторонники python предпочли бы не-GIL-интерпретатор. – BobbyShaftoe