Skip to content

The project was created to show how calculations can be optimized

License

Notifications You must be signed in to change notification settings

DarkPythons/Python_Computing_Speed

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

21 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Скорость вычислений на Python

Начало

Python является медленным языком программирования, по сравнению с другими языками, поэтому любой уважающий себя программист хочет увеличить скорость выполнения его кода, или просто повысить скорость вычислений любым способом. Я собрал несколько возможных способов сделать увелечение производительности кода. Мы начнем с самого банального и простого способa вычислений, и медленно двигаясь, будем продвигаться к более сложным методам (или простым) для того чтобы ускорить выполнение вычислений. Мы возьмем самую лучшую задачу, у которой очень большой потенциал увеличения скорости выполнения - "Вычисление чисел Фибоначчи". У каждого на компьютере предложенные способы будут работать по разному, но тут они расставлены по времени выполнения на моём компьютере.

Выполнение

Коды всех алгоритмов, которые описаны ниже, есть в директории python_files/, также там есть особенные директории с алгоритмами на других языках или совмещенные с python, когда вы увидите, что там есть программа на C/C++, скорее всего там будет bat/bash файл, который можно запустить и сделать компиляцию и получение итоговой программы, но для этого на компьютере должен быть компилятор этого языка, также в совмещенном алгоритме Python и C++ будет лежать специальный txt файл, его нужно прочесть Windows-пользователям, также в директории jupyter_files/ есть файлы выполнения алгоритмов на языке python, но программ как-то имеющих отношение к другим языкам там нет.

Иерархия способов и оценки

1. Использование обычной рекурсии

Использование самого обычного способа вычисления множества чисел при помощи рекурсии.

Все вычисления в этом случае заняли: 140.31 секунд

Путь до кода/директории программы: python_files/1_fibbonachi_recursive.py

Путь до Jupyter программы: jupyter_files/1_fibbonachi_recursive.ipynb

2. Один процесс - одно число фибоначчи

Использование того же алгоритма рекурсии, но теперь вычисление каждого числа фибоначчи будет происходить в одном отдельном процессе, то есть процессов у нас будет столько же, сколько и задач.

Все вычисления в этом случае заняли: 103.90 секунды

Путь до кода/директории программы: python_files/2_fibbonachi_process.py

Путь до Jupyter программы: jupyter_files/2_fibbonachi_process.ipynb

3. Одна очередь - несколько процессов

Использование очереди задач, но теперь процессов у нас ограниченное количество, то есть каждый процесс будет брать задачу (число) из очереди, делать нужные вычисления и помещать число фибоначчи в общий список результатов.

Все вычисления в этом случае заняли: 91.73 секунд

Путь до кода/директории программы: python_files/3_fibbonachi_one_queues.py

Путь до Jupyter программы: jupyter_files/3_fibbonachi_one_queues.ipynb

4. Две очереди - несколько процессов

Использование двух очередей, одна отвечает за задачи, которые будут брать процессеы и решать (вычислять), другая очередь результатов, куда нужно будет помещать числа фибоначчи.

Все вычисления в этом случае заняли: 89.24 секунд

Путь до кода/директории программы: python_files/4_fibbonachi_two_queues.py

Путь до Jupyter программы: jupyter_files/4_fibbonachi_two_queues.ipynb

5. Пул процессов для вычислений

Использование специального класса Pool, который делает создание объекта пула, через который можно запустить несколько процессов, и дать этим процессам решать некоторые задачи

Все вычисления в этом случае заняли: 70.81 секунд

Путь до кода/директории программы: python_files/5_fibbonachi_pool.py

Путь до Jupyter программы: jupyter_files/5_fibbonachi_pool.ipynb

6. Вычисления на C

Использование вместо Python языкa программирования C, то есть мы сделали замену высокоуровневого и интерпритируемого языка на низкоуровневый и компилируемый язык

Все вычисления в этом случае заняли: 6.20 секунд

Путь до кода/директории программы: python_files/6_fibbonachi_c_lang

Путь до Jupyter программы: Отдельная директория в python_files

7. Вычисления на C++

Использование вместо Python языкa программирования C++, то есть мы сделали замену высокоуровневого и интерпритируемого языка на низкоуровневый и компилируемый язык

Все вычисления в этом случае заняли: 5.36 секунд

Путь до кода/директории программы: python_files/7_fibbonachi_cpp_lang

Путь до Jupyter программы: Отдельная директория в python_files

8. *Логика программы - Python, вычисления - С++

* - Средняя по сложности реализация

Использование Python для основной логики нашей программы, где мы делали инициализацию процессов которые делали получение чисел фибоначчи при помощи библиотеки, которая была написана на C++.

Все вычисления в этом случае заняли: 3.09 секунд

Путь до кода/директории программы: python_files/8_fibbonachi_python_and_cpp

Путь до Jupyter программы: Отдельная директория в python_files

9. Использование кэширования

Использование кэширования. Так как мы используем рекурсию, у нас будет происходить вызов нашей функции множество раз с теми же параметрами, поэтому хорошим решением будет кэширование

Все вычисления в этом случае заняли: 0.0 секунд

Путь до кода/директории программы: python_files/9_fibbonachi_cached.py

Путь до Jupyter программы: jupyter_files/9_fibbonachi_cached.ipynb

10. Метод из динамического программирования

Использование списка результатов (чисел фибоначчи), где мы брали по индексу предыдущее значение и пред-предыдущее, после чего складывали их, получая новое число фибоначчи

Все вычисления в этом случае заняли: 0.0 секунд

Путь до кода/директории программы: python_files/10_fibbonachi_dinam_prog.py

Путь до Jupyter программы: jupyter_files/10_fibbonachi_dinam_prog.ipynb

Distribute

Developers

License

The Python_Computing_Speed project is distributed under the MIT license.

About

The project was created to show how calculations can be optimized

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published