用于Django应用程序的Cython:它会起作用吗?

Dan*_*iel 8 python django compilation cython python-3.x

使用python 3.4 Django app进行cython编译,还是可以在没有大量工作的情况下使用?

这个答案 - /sf/answers/514301791/ - 关于保护python代码的问题促使我提出这个问题.

之前已经提出了一个类似的问题,但是关于提高性能:使用Cython和Django.是否有意义?

ode*_*den 11

是的,我们已经做到了.但它始终如一的痛苦.

我们制造了一种名为InProd的商业产品,该产品安装在客户端,用于管理他们的Genesys电力联络中心.该应用程序的核心是用Django编写的,我们希望保护(限制)代码免受检查.

在本机python中运行可以提高速度,但这并没有太大的差别.改进取决于任务的类型,有时最高可达30%.

我们不时遇到问题,其中某些东西在Python中有效,但在Cython中却没有.除非你有很好的动力,否则我不会推荐这条道路.

目前版本使用Django 1.11在Python 3.5上运行

  • 正如更新一样,我们发现 Cython 下并非所有内容都有效,我们需要添加一些排除规则以使解决方案正常工作。我们发现 Django 迁移和任何 Celery 计划任务都不起作用。所以这些组件作为纯Python部署并没有什么大不了的。该产品现已在企业客户(例如银行和政府机构)中投入生产超过 4 年,效果良好。 (3认同)

Mur*_*ala 10

我知道现在回答已经太晚了。即使它可能会有所帮助。我在项目主目录中创建了一个 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)
)
Run Code Online (Sandbox Code Playgroud)

扫描您的应用程序目录并将文件添加到 fileSet 中,无论您想编译什么。file1.py、file2.py 和 file3.py 只是示例。

最后,运行 setup.py 文件如下

python setup.py build_ext --inplace 
Run Code Online (Sandbox Code Playgroud)

然后 Cython stats 编译每个文件并使其成为 .so 文件。示例:app1/file1.so app2/file2.so app3/file3.so

这些文件是共享目标文件,您无法手动解释。删除所有 .py 和 .pyc 文件。然后运行你的项目

python manage.py runserver
Run Code Online (Sandbox Code Playgroud)

或者您可以在生产服务器中托管这些二进制文件。我试过NGINX,uWSGI。

祝你好运。

  • 到目前为止,我没有注意到性能有任何差异。目前我们没有更多的用户。但该应用程序运行良好。也许我们可以通过产生一些负载来找到它。 (2认同)