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

时间:2015-09-15 04:42:45

标签: python django python-3.x compilation cython

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

这个答案 - https://stackoverflow.com/a/7347168/805141 - 关于保护python代码的问题促使我提出这个问题。

之前已经提出了一个类似的问题,但有关提高绩效的问题:Using Cython with Django. Does it make sense?

2 个答案:

答案 0 :(得分:10)

是的,我们已经做到了。但它始终存在痛苦。

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

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

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

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

答案 1 :(得分:4)

我知道答案为时已晚。即使这可能会有所帮助。 我已经在项目主目录中创建了一个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)
)

扫描您的应用程序目录,然后将文件添加到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。

祝你好运。