Форум программистов, компьютерный форум, киберфорум
Python: IDE, инструментарий
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.54/82: Рейтинг темы: голосов - 82, средняя оценка - 4.54
 Аватар для supmener
87 / 95 / 15
Регистрация: 26.06.2013
Сообщений: 4,755

Увеличиваем скорость Python и уменьшаем потребление памяти

21.07.2022, 07:52. Показов 24210. Ответов 281
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Если не учитывать, разные советы по увеличению скорости, например замена for на while, то предлагаю знающих людей высказаться, какая из библиотек для увеличения скорости выполнения кода им больше нравится или написать впечатления от тестирования какой-то из них. Также прошу посоветовать библиотеки по уменьшению расхода оперативной памяти, если они есть.

https://nuitka.net/posts/pytho... ndows.html
https://nuitka.net/doc/download.html
https://pypi.org/project/Nuitka/

https://github.com/Nuitka/Nuitka
Build it using
python -m nuitka hello.py
Note

This will prompt you to download a C caching tool (to speed up repeated compilation of generated C code) and a MinGW64 based C compiler unless you have a suitable MSVC installed. Say yes to both those questions.
Создайте его, используя
python -m nuitka hello.py
Примечание

Вам будет предложено загрузить инструмент кэширования C (для ускорения повторной компиляции сгенерированного кода C) и компилятор C на основе MinGW64, если у вас не установлен подходящий MSVC. Скажите «да» на оба этих вопроса.
Nuitka люди используют, чтобы делать exe из кода Пайтон.

======================================== ======

https://github.com/pyston/pyston/releases

https://numba.pydata.org/numba... guide.html

https://downloads.python.org/pypy/

https://cython.org/
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.07.2022, 07:52
Ответы с готовыми решениями:

Убираем циклы, увеличиваем скорость! +тесты
Уважаемые форумчане, предлагаю вашему вниманию небольшую сборку тестов, смотрим и используем более быстрые методы Module Module1 ...

Потребление памяти
Здравствуйте! Озадачился оптимизацией потребления памяти, поэтому подскажите, каким способом можно узнать сколько некоторые части кода...

Потребление памяти
Добрый день. У меня есть код, который реализует загрузку изображений в таблицу. Я сделал две версии: 1) простая асинхронная загрузка...

281
5184 / 1074 / 150
Регистрация: 29.01.2013
Сообщений: 6,263
02.08.2022, 18:09
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от supmener Посмотреть сообщение
Если в скобках ничего не указывать, то получаются результаты:
0.2929217000200879
0.09410759998718277
т.е. while - медленнее?)
0
 Аватар для supmener
87 / 95 / 15
Регистрация: 26.06.2013
Сообщений: 4,755
02.08.2022, 18:13  [ТС]
С Numba медленнее получилось.
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7393 / 4820 / 1246
Регистрация: 30.03.2015
Сообщений: 13,703
Записей в блоге: 29
02.08.2022, 18:14
Цитата Сообщение от supmener Посмотреть сообщение
Написал для эксперимента
для какого? ты хоть понимаешь что такое гил?
0
 Аватар для supmener
87 / 95 / 15
Регистрация: 26.06.2013
Сообщений: 4,755
02.08.2022, 18:18  [ТС]
В том видео, где рассказывалось, как пользоваться Numba, про GIL тоже объяснялось. Решил посмотреть, что получится при разных режимах. Попробовал пока что только эти два.
0
5184 / 1074 / 150
Регистрация: 29.01.2013
Сообщений: 6,263
02.08.2022, 19:25
Цитата Сообщение от supmener Посмотреть сообщение
про GIL тоже объяснялось
рассказывай. Не цитируй, а именно рассказывай. Своими словами.
0
 Аватар для supmener
87 / 95 / 15
Регистрация: 26.06.2013
Сообщений: 4,755
02.08.2022, 21:42  [ТС]
В видео сказано, что GIL запрещает программам на Python работать в многопоточном режиме, задействуя паралельно несколько ядер процессора.
0
5184 / 1074 / 150
Регистрация: 29.01.2013
Сообщений: 6,263
02.08.2022, 21:58
прям-таки запрещает? ты уверен в этом?)
0
 Аватар для supmener
87 / 95 / 15
Регистрация: 26.06.2013
Сообщений: 4,755
02.08.2022, 22:58  [ТС]
Цитата Сообщение от Alli_Lupin Посмотреть сообщение
прям-таки запрещает? ты уверен в этом?)
Пока что не изучил эту технологию на достаточно приемлемом уровне.

https://book.pythontips.com/en... nsion.html

https://sourceforge.net/projects/swig/
0
5184 / 1074 / 150
Регистрация: 29.01.2013
Сообщений: 6,263
02.08.2022, 23:55
supmener, зачем мне эти ссылки? сам читай, разбирайся. После этого приди и расскажи.
0
 Аватар для supmener
87 / 95 / 15
Регистрация: 26.06.2013
Сообщений: 4,755
03.08.2022, 00:37  [ТС]
Ссылки не по поводу этого вопроса.
0
5184 / 1074 / 150
Регистрация: 29.01.2013
Сообщений: 6,263
03.08.2022, 00:39
так вы хоть с чем-то разберитесь, прежде чем за другую дребедень хвататься.
0
 Аватар для supmener
87 / 95 / 15
Регистрация: 26.06.2013
Сообщений: 4,755
03.08.2022, 20:02  [ТС]
Цитата Сообщение от supmener Посмотреть сообщение
А когда спарсю, надо будет сообщить?
Цитата Сообщение от Катафалк Посмотреть сообщение
Обязательно
Спарсил Какие прокси подходят для парсинга?
0
Модератор
Эксперт Python
 Аватар для Fudthhh
2696 / 1602 / 513
Регистрация: 21.02.2017
Сообщений: 4,210
Записей в блоге: 1
08.08.2022, 09:39
Цитата Сообщение от supmener Посмотреть сообщение
Пока что не изучил эту технологию на достаточно приемлемом уровне.
Как ты вообще можешь оценить "приемлемый уровень", если ты не достиг его ни где?

О for и while:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
import timeit
 
 
def foo(a: int) -> None:
    for _ in range(a): ...
 
def bar(a: int) -> None:
    while (a := a - 1) > 0: ...
 
 
a = 1000
print(timeit.timeit(lambda: foo(a), number=1000))
print(timeit.timeit(lambda: bar(a), number=1000))
Code
1
2
0.02574340000046504
0.05448419999993348
Ускорение кода используя while, ютуберов насмотрелся?

О numba:
Ты вообще вкурсе, что используя сие инструмент тебе нужно будет писать большую часть функций самому? Например sum? Я на сто процентов уверен что напишешь (если доживем) эту функцию так, что только она будет занимать в 1e100 времени больше чем все программы с этого форума вместе взятые.
2
08.08.2022, 10:00

Не по теме:

Цитата Сообщение от Fudthhh Посмотреть сообщение
while (a := a - 1) > 0:
Прикольная запись =)

0
Модератор
Эксперт Python
 Аватар для Fudthhh
2696 / 1602 / 513
Регистрация: 21.02.2017
Сообщений: 4,210
Записей в блоге: 1
08.08.2022, 10:12
Приколюха с numba:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
import numba
import timeit
 
 
@numba.njit
def foo(a: int) -> None:
    for _ in range(a): ...
 
@numba.njit
def bar(a: int) -> None:
    #while (a := a - 1) > 0: ...
    while a > 0:
        a -= 1
Вызов 1:
Python
1
2
3
a = 1000
print("FOO:", timeit.timeit(lambda: foo(a), number=1000))
print("BAR:", timeit.timeit(lambda: bar(a), number=1000))
Результат 1:
Code
1
2
FOO: 0.18518500000027416
BAR: 0.07009430000107386
Вызов 2:
Python
1
2
3
a = 1000
print("BAR:", timeit.timeit(lambda: bar(a), number=1000))
print("FOO:", timeit.timeit(lambda: foo(a), number=1000))
Результат 2:
Code
1
2
BAR: 0.21314149999852816
FOO: 0.06220219999886467
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
08.08.2022, 15:47
Цитата Сообщение от Fudthhh Посмотреть сообщение
Приколюха с numba:
Это да, на первых страницах докаументации написано:
First, recall that Numba has to compile your function for the argument types given before it executes the machine code version of your function, this takes time. However, once the compilation has taken place Numba caches the machine code version of your function for the particular types of arguments presented. If it is called again the with same types, it can reuse the cached version instead of having to compile again.

A really common mistake when measuring performance is to not account for the above behaviour and to time code once with a simple timer that includes the time taken to compile your function in the execution time.
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
@numba.njit
def foo(n: int) -> int:
    result = 1
    for i in range(1, n):
        result *= i
    return result
 
 
@numba.njit
def bar(n: int) -> int:
    result = 1
    i = 1
    while i < n:
        result *= i
        i += 1
    return result
 
 
a = 1000
print("FOO:", timeit.timeit(lambda: foo(a), number=1000))
print("BAR:", timeit.timeit(lambda: bar(a), number=1000))
 
a = 1000
print("FOO:", timeit.timeit(lambda: foo(a), number=1000))
print("BAR:", timeit.timeit(lambda: bar(a), number=1000))
Code
1
2
3
4
FOO: 0.17471038200892508
BAR: 0.06019709096290171
FOO: 0.0016408050432801247
BAR: 0.0018107458017766476
1
 Аватар для supmener
87 / 95 / 15
Регистрация: 26.06.2013
Сообщений: 4,755
10.08.2022, 15:14  [ТС]
Цитата Сообщение от Fudthhh Посмотреть сообщение
Ускорение кода используя while, ютуберов насмотрелся?
О numba:
Ты вообще вкурсе, что используя сие инструмент тебе нужно будет писать большую часть функций самому? Например sum?
Насчет while узнал из статьи с советами по ускорению выполнения кода.
Насчет того, что надо переписывать sum и другие функции, об этом не знал.

Цитата Сообщение от Рыжий Лис Посмотреть сообщение
Это да, на первых страницах докаументации написано
Там не обратил внимание, а встречал похожее упоминание в другом месте, в изложении отличия интерпретируемых и компилируемых языков.
0
Модератор
Эксперт Python
 Аватар для Fudthhh
2696 / 1602 / 513
Регистрация: 21.02.2017
Сообщений: 4,210
Записей в блоге: 1
10.08.2022, 15:43
Цитата Сообщение от supmener Посмотреть сообщение
Насчет while узнал из статьи с советами по ускорению выполнения кода.
Стоит задуматься то ли ты читаешь, если практика это опровергает.
0
 Аватар для supmener
87 / 95 / 15
Регистрация: 26.06.2013
Сообщений: 4,755
12.08.2022, 11:25  [ТС]
Можно ли придумать другой пример, более понятный для меня? Или объяснить другими словами (цифрами) этот?

Compiling Python code with @jit — Numba 0.56.0+0.gf75c45a8d.dirty-py3.7-linux-x86_64.egg documentation.html (перевел отсюда, страница с этим именем сохраняется)
https://numba.readthedocs.io/e... r/jit.html
Python
1
2
3
4
5
6
from numba import jit, int32
 
@jit(int32(int32, int32))
def f(x, y):
    # Несколько тривиальный пример
    return x + y
int32(int32, int32) — сигнатура функции. В этом случае соответствующая специализация будет скомпилирована декоратором @jit, и никакая другая специализация не будет разрешена. Это полезно, если вам нужен детальный контроль над типами, выбранными компилятором (например, для использования чисел с плавающей запятой одинарной точности).

Если вы опустите возвращаемый тип, например. написав (int32, int32) вместо int32(int32, int32), Numba попытается сделать вывод за вас. Сигнатуры функций также могут быть строками, и вы можете передать несколько из них в виде списка; см. документацию numba.jit() для более подробной информации.

Разумеется, скомпилированная функция дает ожидаемые результаты:
Python
1
2
>>>f(1,2)
3
и если мы указали int32 в качестве возвращаемого типа, биты более высокого порядка отбрасываются:

Python
1
2
>>>f(2**31, 2**31 + 1)
1
0
12.08.2022, 11:40

Не по теме:

что за дичь я сейчас прочитал?!

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
12.08.2022, 11:40

Потребление памяти
Подскажите, где можно посмотреть сколько памяти выделяет устройство под сторонние программы (например айпад1 - 80 мб)?

Потребление памяти
Добрый день. У меня есть программа, которая передает данные из StringGrida в таблицу SQL Server 2000. Используется ADOConnection,...

Потребление памяти
Приветствую всех! Прошу помощи в решении проблемы. Последнею неделю поигрывал в Subnautica и все было замечательно. После перерыва в пару...

Потребление памяти
В среднем, во сколько раз отличается потребление памяти у 32 и 64 битных версий явы? Используются Java EE, hibernate, spring...

Потребление памяти
Привет всем, подскажите парни.Это нормально? Мне кажется что то у меня большое потребление памяти.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
180
Ответ Создать тему
Новые блоги и статьи
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru