Python в чистом виде никогда не будет
самым быстрым. Хотите быстро - используйте компилируемые языки. Хотите ещё быстрее? Используйте GPU. И, тем не менее, python весьма удобен для создания высокоуровневого интерфейса и контроля за модулями на других языках.
Что касается требовательных к CPU задач (подчёркиваю,
не input/output), то это довольно болезненная тема. Из-за GIL треды не будут исполняться на разных ядрах одновременно, однако это можно обойти. Итак, варианты:
- использовать процессы (модуль multiprocessing, но порождение процесса, в сравнении с тредом, дорогое и поможет только если некая минимальная задача выполнятся достаточно долго);
- cython (можно отпускать GIL и писать threading-safe код на си);
- opencl (опять си, вычисления переносятся на совместимый CPU/GPU);
- Theano (символьная математика, генерирует оптимизированный код, который будет исполняться на CPU или GPU).
Вот
великолепная статья по указанным методам. Разумеется, все перечисленное имеет смысл, если задача допускает распараллеливание.