Каковы варианты достижения параллелизма в Python? Я хочу выполнить кучу вычислений с привязкой к ЦП для некоторых очень больших растров и распараллелить их. Исходя из опыта C, я знаком с тремя подходами к параллелизму:
- Процессы передачи сообщений, возможно, распределенные по кластеру, например. MPI.
- Явный параллелизм разделяемой памяти с использованием pthreads или fork(), pipe() и т. д. все
- Неявный параллелизм разделяемой памяти с использованием OpenMP.
Принятие решения о подходе к использованию — это упражнение в компромиссах.
Какие подходы доступны в Python и каковы их характеристики? Существует ли кластеризованный клон MPI? Каковы предпочтительные способы достижения параллелизма с общей памятью? Я слышал упоминания о проблемах с GIL, а также упоминания о tasklets.
Короче говоря, что мне нужно знать о различных стратегиях распараллеливания в Python, прежде чем выбирать между ними?