Python является медленным языком программирования, по сравнению с другими языками, поэтому любой уважающий себя программист хочет увеличить скорость выполнения его кода, или просто повысить скорость вычислений любым способом. Я собрал несколько возможных способов сделать увелечение производительности кода. Мы начнем с самого банального и простого способa вычислений, и медленно двигаясь, будем продвигаться к более сложным методам (или простым) для того чтобы ускорить выполнение вычислений. Мы возьмем самую лучшую задачу, у которой очень большой потенциал увеличения скорости выполнения - "Вычисление чисел Фибоначчи". У каждого на компьютере предложенные способы будут работать по разному, но тут они расставлены по времени выполнения на моём компьютере.
Коды всех алгоритмов, которые описаны ниже, есть в директории python_files/, также там есть особенные директории с алгоритмами на других языках или совмещенные с python, когда вы увидите, что там есть программа на C/C++, скорее всего там будет bat/bash файл, который можно запустить и сделать компиляцию и получение итоговой программы, но для этого на компьютере должен быть компилятор этого языка, также в совмещенном алгоритме Python и C++ будет лежать специальный txt файл, его нужно прочесть Windows-пользователям, также в директории jupyter_files/ есть файлы выполнения алгоритмов на языке python, но программ как-то имеющих отношение к другим языкам там нет.
Использование самого обычного способа вычисления множества чисел при помощи рекурсии.
Все вычисления в этом случае заняли: 140.31 секунд
Путь до кода/директории программы: python_files/1_fibbonachi_recursive.py
Путь до Jupyter программы: jupyter_files/1_fibbonachi_recursive.ipynb
Использование того же алгоритма рекурсии, но теперь вычисление каждого числа фибоначчи будет происходить в одном отдельном процессе, то есть процессов у нас будет столько же, сколько и задач.
Все вычисления в этом случае заняли: 103.90 секунды
Путь до кода/директории программы: python_files/2_fibbonachi_process.py
Путь до Jupyter программы: jupyter_files/2_fibbonachi_process.ipynb
Использование очереди задач, но теперь процессов у нас ограниченное количество, то есть каждый процесс будет брать задачу (число) из очереди, делать нужные вычисления и помещать число фибоначчи в общий список результатов.
Все вычисления в этом случае заняли: 91.73 секунд
Путь до кода/директории программы: python_files/3_fibbonachi_one_queues.py
Путь до Jupyter программы: jupyter_files/3_fibbonachi_one_queues.ipynb
Использование двух очередей, одна отвечает за задачи, которые будут брать процессеы и решать (вычислять), другая очередь результатов, куда нужно будет помещать числа фибоначчи.
Все вычисления в этом случае заняли: 89.24 секунд
Путь до кода/директории программы: python_files/4_fibbonachi_two_queues.py
Путь до Jupyter программы: jupyter_files/4_fibbonachi_two_queues.ipynb
Использование специального класса Pool, который делает создание объекта пула, через который можно запустить несколько процессов, и дать этим процессам решать некоторые задачи
Все вычисления в этом случае заняли: 70.81 секунд
Путь до кода/директории программы: python_files/5_fibbonachi_pool.py
Путь до Jupyter программы: jupyter_files/5_fibbonachi_pool.ipynb
Использование вместо Python языкa программирования C, то есть мы сделали замену высокоуровневого и интерпритируемого языка на низкоуровневый и компилируемый язык
Все вычисления в этом случае заняли: 6.20 секунд
Путь до кода/директории программы: python_files/6_fibbonachi_c_lang
Путь до Jupyter программы: Отдельная директория в python_files
Использование вместо Python языкa программирования C++, то есть мы сделали замену высокоуровневого и интерпритируемого языка на низкоуровневый и компилируемый язык
Все вычисления в этом случае заняли: 5.36 секунд
Путь до кода/директории программы: python_files/7_fibbonachi_cpp_lang
Путь до Jupyter программы: Отдельная директория в python_files
* - Средняя по сложности реализация
Использование Python для основной логики нашей программы, где мы делали инициализацию процессов которые делали получение чисел фибоначчи при помощи библиотеки, которая была написана на C++.
Все вычисления в этом случае заняли: 3.09 секунд
Путь до кода/директории программы: python_files/8_fibbonachi_python_and_cpp
Путь до Jupyter программы: Отдельная директория в python_files
Использование кэширования. Так как мы используем рекурсию, у нас будет происходить вызов нашей функции множество раз с теми же параметрами, поэтому хорошим решением будет кэширование
Все вычисления в этом случае заняли: 0.0 секунд
Путь до кода/директории программы: python_files/9_fibbonachi_cached.py
Путь до Jupyter программы: jupyter_files/9_fibbonachi_cached.ipynb
Использование списка результатов (чисел фибоначчи), где мы брали по индексу предыдущее значение и пред-предыдущее, после чего складывали их, получая новое число фибоначчи
Все вычисления в этом случае заняли: 0.0 секунд
Путь до кода/директории программы: python_files/10_fibbonachi_dinam_prog.py
Путь до Jupyter программы: jupyter_files/10_fibbonachi_dinam_prog.ipynb
The Python_Computing_Speed project is distributed under the MIT license.