Форум сайта python.su
Python 3.7.1
Чтобы ускорить часть кода написал его на Cython (с С- типами и С-методами) и действительно поулчил хорошее ускорение. Но закаралось подозрение в этом методе:
1. Практически невозможно отлаживать (видно только ошибки компиляции). А я, к сожалению, не умею писать код сразу без ошибок.
2. Получился очень странный язык, представляющий из себя смесь Python / C++, поэтому сложнее найти помощь в инете.
3. Cython представляет подмножество С++ (особенно если учесть, что С++11 / С++14 / С++17 очень сильно изменили язык).
С другой стороны при самостоятельной разработки высоконагруженных частей на С++ придется писать лишний код, чтобы как- то протестировать полученную библиотеку (подать ей на вход весь возможный набор данных).
Не думаю, что серьзные проекты пишут на Cython, скорее всего используют его только для вызова библиотек, написанных на С/С++.
Может кто- то поделиться своим решением этого вопроса?
p.s. Пожалуйста, не предлагайте Numa: на сегодняшний день она может очень мало (ускоряет код только при работе с числами, а с остальными типами получается скорость обычного Python- кода).
Офлайн
Cython вообще не используем.
Большая часть кода которая пишется на питоне некритична ко времени выполнения. Критоичные части пишутся на C++/C. Питон используется как скриптовый язык или встраиванием в приложение или как управляющий скрипт. Для плюсов используем pybind11, boost python.
Офлайн
doza_and
Cython вообще не используем.
Большая часть кода которая пишется на питоне некритична ко времени выполнения. Критоичные части пишутся на C++/C. Питон используется как скриптовый язык или встраиванием в приложение или как управляющий скрипт. Для плюсов используем pybind11, boost python.
Офлайн
Sanya28Я бы не сказал привлекло. Скорее наименьшее из зол (ctypes, cffi, swig, cython, sip, common c extension).
Можете ответить: что вас привлекло в вашем решении?
Sanya28Давненько смотрел Cython, не являюсь по нему специалистом, могу чтото и упустить.
но честно говоря не нашел преимуществ над Cython
cdef extern from "Rectangle.h" namespace "shapes": cdef cppclass Rectangle:
cdef class PyRectangle: cdef Rectangle c_rect # Hold a C++ instance which we're wrapping def __cinit__(self, int x0, int y0, int x1, int y1): self.c_rect = Rectangle(x0, y0, x1, y1)
Sanya28Тут я собственно не понимаю в чем у вас проблема. Питон вместе с подгруженными модулями это обычное приложение на C++. Берете и пользуетесь обычными отладчиком и профилировщиком. Ничем не отличается от сишного приложения. Ну при желании правда можно и питоновский отладчик/ide запустить из под отладчика сишного. Тогда будет два уровня отладки, питоновский и сишный.
За кадром остался вопрос отладки и профилирования С++ кода
Sanya28Для работы с объектами вы их создаете. В конструктор объектов передаются аргументы, очевидно на питоновской стороне. Почему это лишний код? Он всегда необходим. А конвертацией чисто питоновских структур данных в сишные занимается по большей части рекурсивный код автоматических преобразований типов (в pybind11). Оно все по умолчанию делается, вы об этом можете не заботиться пока вас производительность этого процесса устраивает.
асколько я понял в вашем случае также необходимо как- то передавать вычислительному ядру исходные данные,
Sanya28А зачем вам тогда вообще питон нужен? Пишите сразу на C++. Про отладку я писал, проблем нет.
Интересно, есть ли способ преобразовать Python- программу в корректный проект с исходниками на С++
Отредактировано doza_and (Ноя. 10, 2019 19:34:54)
Офлайн
Sanya28
Чтобы ускорить часть кода написал его на Cython (с С- типами и С-методами) и действительно поулчил хорошее ускорение.
doza_andSanya28, нужно было сначала посмотреть, как у других сделано. В одном проекте используй несколько языков. Тогда ты и будешь иметь к каждому компоненту свой набор нативных инструментов.
А зачем вам тогда вообще питон нужен? Пишите сразу на C++.
Отредактировано py.user.next (Ноя. 10, 2019 23:45:11)
Офлайн
doza_and
Тут я собственно не понимаю в чем у вас проблема. Питон вместе с подгруженными модулями это обычное приложение на C++. Берете и пользуетесь обычными отладчиком и профилировщиком.
Отредактировано Sanya28 (Ноя. 11, 2019 08:27:17)
Офлайн
py.user.next
Sanya28, нужно было сначала посмотреть, как у других сделано. В одном проекте используй несколько языков. Тогда ты и будешь иметь к каждому компоненту свой набор нативных инструментов.
Офлайн
> Пожалуйста, не предлагайте Numa: на сегодняшний день она может очень мало
pypy не пробовал?
Офлайн
Rodegast
pypy не пробовал?
Отредактировано Sanya28 (Ноя. 11, 2019 14:04:18)
Офлайн
Господа, я в этой теме не разбираюсь, но вот интересно, что про это скажут go-феристы и эрланговцы - это лучше с/c++ или да :-) ? Или таковых тут нет?
Офлайн