Django与PyPy

17

使用PyPy和Django的原因是什么?我读到PyPy可以提高性能。


1
最近在pypy-dev邮件列表中讨论了真实世界的性能数据。我使用PyPy 1.7和psycopg2ct运行了一个相对较大的网站,得到了类似的结果。目前看来,基于ctypes的PostgreSQL驱动程序(如psycopg2ct或pypq)阻止了Typical Django应用程序的实质性加速。此外,您需要考虑JIT的长时间热身。请参见http://mail.python.org/pipermail/pypy-dev/2011-October/008499.html开始的线程。 - akaihola
psycopg2cffi 项目似乎已经将数据库适配器的性能提升到了一个新的水平。请参见 http://chtd.ru/blog/bystraya-rabota-s-postgres-pod-pypy/?lang=en - akaihola
有关使用PyPy与PostgreSQL的不同选项的更多信息,请参见https://dev59.com/imox5IYBdhLWcg3wNRxj#13663976。 - akaihola
3个回答

24

不太可能。Django应用程序几乎总是受I/O限制,通常是因为数据库连接的原因。PyPy对此没有帮助,即使它完全兼容(我不确定是否如此)。


3
对其进行剖析以确定瓶颈所在,然后从那里入手。如果需要更多帮助,请在此处发布剖析结果。 - Vinay Sajip
5
过早地优化是一个坏主意。在你甚至开始这个项目之前,就已经非常过早了。 - Wooble
6
我认为“在开始项目前进行优化”为什么是个坏主意并不明显,毕竟你没有任何损失,而且一开始做出的错误决策只会增加后续的维护负担。 - Jeeyoung Kim
3
@Jonathan,那个图表至少是误导性的。如果你查看Django实际基准测试,它仅测试模板渲染:这确实依赖于CPU,但只是完整请求周期的一小部分。我的评论还是站得住脚的。 - Daniel Roseman
2
模板渲染是请求周期中最困难的部分,假设您的查询足够快(在我的情况下,所有查询都在10毫秒内完成,但模板渲染需要大约100-200毫秒)。 - Ivan Virabyan
显示剩余7条评论

10

取决于情况。

PyPy确实可以提高PyPy基准套件中所有基准测试的性能。目前只有模板渲染,但没有其他的提交。可以安全地假设对性能至关重要的代码将更快(特别是经过一些调整之后)。

与兼容性相关的数据库问题有点麻烦,因为只有sqlite可用,而且它很慢(不过有一个分支可以解决这个问题)。人们也报告说,例如使用SQLAlchemy时pg8000可用,但我没有第一手经验。

祝好, fijal


6

我使用PyPy + Django进行了一些实验。主要存在两个问题:

  • 大多数数据库适配器和其他第三方模块无法使用PyPy编译(即使Wiki上说可以)。

  • 有一台服务器进行了一些复杂的计算,我认为它可能会受益于JIT编译,但却出现了不断增长的内存占用,这可能是因为JIT正在存储跟每个请求独有的跟踪信息,所以不能够被重复使用?

从理论上讲,如果您的服务器进行了一些有趣的计算,使用纯Python模块,并且具有大量内存中对象(因为在某些情况下,PyPy可以减少每个对象使用的内存),那么PyPy可能会赢得胜利。否则,JIT的更高内存需求将是一个障碍,因为它减少了内存缓存的机会,并且可能需要额外的服务器来运行足够的服务器进程。


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