Когда дело доходит до оптимизации кода Python (или любого кода), оно часто заканчивается профилированием для оптимизации узких мест или медленных функций. Однако при оптимизации этих областей кода существуют ли какие-либо варианты использования чистого Python bytecodeinline? Я знаю, что вы можете сделать это с помощью встроенной функции compile
и модуля compiler
.Оптимизация Python с помощью байт-кода
ответ
... Есть ли какие-либо варианты использования чистого байт-кода Python?
Да. Иногда вы можете выполнить немного более быстрый код, чем обычно генерирует Python.
Кроме того, вы можете получить доступ к переменным индукции цикла для понимания списков.
Вот несколько ссылок, чтобы вы начали: https://www.google.com/search?q=python+bytecode+hacks
Если вы хотели бы сделать байткодом манипуляции программно, вот рецепт оптимизации, который показывает, как идти об этом: Decorator for BindingConstants at compile time
Это говорит, если вам небезразлична скорость, простейшее ускорение часто запускается pypy вместо cpython, если это позволяет ваше приложение.
№ Исходный код скомпилирован в байт-код только один раз, когда модуль загружен первым. Байт-код - это то, что интерпретируется во время выполнения. Таким образом, даже если вы могли бы включить байт-код в строку в исходный код, это, скорее всего, повлияет только на время запуска программы за счет сокращения времени, затрачиваемого Python на преобразование исходного кода в байт-код. На самом деле это не изменит скорость работы кода. Например, версия «чистого байт-кода» цикла, которая выполняется 1000 раз, не будет работать быстрее, чем тот же цикл, написанный в исходном коде Python. См. this similar question, а также this one.
compile
и compiler
существуют, чтобы позволить вам динамически создавать новый исполняемый исходный код из строк во время работы программы. Это не для производительности, это просто потому, что нет другого способа сделать это. Когда вы запускаете программу Python, Python компилирует исходный код в байт-код. Но если вы хотите динамически создавать новые функции, которые непосредственно не присутствуют в исходном коде (например, путем смешивания и сопоставления фрагментов кода или предоставления пользователям возможности вводить код во время работы программы), вам нужен способ их компиляции на лету, и вот что такое compile
. (Это на самом деле не является общей потребностью, поэтому эти функции часто не используются).
- 1. Оптимизация с помощью Python (scipy.optimize)
- 2. Дизайн байткода?
- 3. Целевая линейная оптимизация/линейная оптимизация с помощью Python
- 4. Как инициализировать встроенный интерпретатор Python с оптимизацией байткода из C++?
- 5. Python: оптимизация кода с помощью SQLite3 + Mutagen
- 6. Оптимизация кода манипуляции списком с помощью Python
- 7. java.lang.VerifyError после инъекции байткода
- 8. Прямая вставка байткода
- 9. Код подтверждения байткода Android
- 10. Поиск размера байткода метода
- 11. Переменные переменных во время использования метода байткода с помощью ASM
- 12. Оптимизация функции python с numba
- 13. Оптимизация с помощью кодирования
- 14. Оптимизация с помощью scipy_optimize
- 15. Оптимизация Python
- 16. Непоследовательность байткода - java.lang.IncompatibleClassChangeError: Реализация класса
- 17. Чтение байткода из класса Path
- 18. Оптимизация Python с большими числами
- 19. Оптимизация функции Python с Parakeet
- 20. Вызвать метод класса байткода, java
- 21. Сохранение значений в формате байткода
- 22. Python: оптимизация цикла
- 23. Оптимизация анализа Python Scripts
- 24. Оптимизация цикла python
- 25. Оптимизация кода для заполнения базы данных с помощью python (Django)
- 26. Оптимизация производительности с помощью большого словаря в Python
- 27. Расширение байткода для полей в классе
- 28. Оптимизация кода с помощью Scala
- 29. requirejs оптимизация с помощью gulp
- 30. Оптимизация анимации с помощью jQuery
Вы не собираетесь писать * тот же * байт-код Python, так же, как вы бы не использовали встроенный ассемблер для написания того же машинного кода, что и ваш компилятор C. Дело в том, чтобы написать лучший байт-код. – user2357112
@ user2357112: Хотя приведенный ниже ответ предполагает, что теоретически возможно, это невозможно с помощью 'compile', потому что' compile' просто компилирует исходный код Python из строки. Если вы можете улучшить байт-код, передав строку для компиляции, вы можете получить тот же байт-код, просто поместив этот исходный код в свою программу напрямую. – BrenBarn
Правда, но он также упоминает модуль 'compiler', который может быть использован для построения объектов кода, более сложных, чем' compile', как правило, дает. Конечно, проще было бы создать объекты 'types.CodeType' напрямую, если вам нравится писать байт-код python вручную. Python vm - довольно аккуратный зверь, ориентированный на стек. – Perkins