在PyPy下运行Django的缺点是什么?

44

我知道Django、PyPy和Psycopg2可以正确地一起使用,而speed.pypy.org声称相对于CPython有很大性能提升。是否存在任何缺点?

2个回答

48

31
我使用pypy+ gunicorn + django + nginx,效果非常好。 - Games Brainiac
3
为了比较两者的时间(参考了大约100个测试用例),我运行了pypy3 manage.py testpython3 manage.py test。结果显示,CPython 大约比 PyPy 快4倍。尽管 PyPy 在纯 Python 代码方面通常更快,但它无法针对 C 代码进行优化,因此速度会变慢。例如密码哈希、加密和 JWT 编码等操作是通过 FFI 调用 C 库来完成的。如果您的服务器不执行这些操作,则 PyPy 可能会更快。但是我的服务器执行了所有这些操作,因此 PyPy 要慢得多。 - tedtanner

13

PyPy 维基 列出了 Django 的兼容性,但并未详细说明测试了多少 Django 的内容。我不知道是否有任何主要的 Django 部署是使用 PyPy 而非 CPython 运行的。更好的问题是为什么要将 Django 应用程序切换到 PyPy,尤其是因为 Django 已经在 CPython 上进行了广泛的测试和部署。

PyPy 适用于计算密集型任务。而 Web 应用程序通常不是这样。他们所基于的 Django 基准测试实际上是一个模板渲染基准测试,这是一个 CPU 密集型任务。这不能代表大多数 Web 应用程序,其中瓶颈往往是 I/O。因此,PyPy 可能不会像那些图表所显示的那样使您的网站加速。


74
“Web 服务器受 I/O 约束,不用担心慢语言”的谬论似乎仍然存在。我知道在我的数据库重负载网站中,50% 的时间实际上是 Python 处理时间。需要渲染模板,需要深度复制查询集。负责任的开发人员应该在各个方面寻找性能改进,而不仅仅是在数据库层面上。 - Thomas
8
这并不代表大多数网络应用程序的情况,那里的瓶颈往往是I/O。您需要进行分析以确定瓶颈在哪里。这并不意味着您不需要担心编写优化的代码。负责任的开发人员会优化其应用程序的关键路径。基于模板渲染基准测试切换到实验性Python运行时几乎是不负责任的做法! - CadentOrange
5
我进行了cpython2和pypy的一些测试。性能测试表明,pypy比cpython更快。然而,在涉及数据库查询的django页面中,使用cpython能够提供更快的服务速度。 - francescortiz
2
@StefanNch 更多的核心意味着更多的并发,也就意味着可以同时处理更多的请求。请记住,“过早优化是万恶之源”。始终进行性能分析,了解问题,然后开始考虑解决方案。 - CadentOrange
3
@StefanNch 我很同情你的情况,但听起来你的网站可能出了问题。许多高流量的网站都是使用Django运行的,例如Instagram。虽然你的网站可能比Instagram还要繁忙,但你需要对应用程序进行分析以找出其缓慢的原因。一个好的开始是安装Django debug toolbar,并检查你的网站中响应缓慢的页面。 - CadentOrange
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接