Cython для приложения Django: будет ли это работать?

Собирался бы с использованием cython с python 3.4 Django app, или он мог бы работать без огромных усилий?

Этот ответ - qaru.site/info/8265/... - на вопрос о защите кода на Python я попросил задать этот вопрос.

Аналогичный вопрос задавался ранее, но в отношении повышения производительности: Использование Cython с Django. Это имеет смысл?

Ответы

Ответ 1

Да, мы сделали это. Но это точка постоянной боли.

Мы производим коммерческий продукт, который устанавливается у клиента для управления его контакт-центром Genesys. Ядро приложения написано на Django, и мы хотели защитить (ограничить) код от проверки.

Скорость работы в родном Python улучшена, но это не является значительной разницей. Улучшение зависит от типа задачи, иногда до 30%, иногда минимально.

Время от времени мы сталкиваемся с проблемами, когда что-то работает в Python, но не в Cython. Я не рекомендовал бы этот путь, если у вас нет действительно хорошей мотивации.

В настоящее время версия работает на Python 3.5 с Django 1.11

Ответ 2

Я знаю, что слишком поздно, чтобы ответить. Хотя это может помочь. Я создал файл setup.py в домашнем каталоге проекта.

from distutils.core import setup
from Cython.Build import cythonize
fileSet = set()
fileSet.add("app1/file1.py")
fileSet.add("app2/file2.py")
fileSet.add("app3/file3.py")
setup(
   ext_modules=cythonize(fileSet)
)

Сканирование каталогов приложений и добавление файлов в файл. Установите все, что вы хотите скомпилировать. file1.py, file2.py и file3.py - только примеры.

Наконец, просто запустите файл setup.py, как показано ниже

python setup.py build_ext --inplace 

Затем статистика Cython компилирует каждый файл и делает его .so файлом. Пример: app1/file1.so app2/file2.so app3/file3.so

Эти файлы являются общими объектными файлами, и вы не можете интерпретировать их вручную. Удалите все файлы .py и .pyc. А затем запустите свой проект как

python manage.py runserver

или вы можете разместить эти двоичные файлы на своем рабочем сервере. Я попробовал NGINX, UWSGI.

Удачи.