Django 与 PyPy
Posted
技术标签:
【中文标题】Django 与 PyPy【英文标题】:Django with PyPy 【发布时间】:2011-05-28 06:47:54 【问题描述】:在 PyPy 中使用 Django 有什么原因吗? 我读过 PyPy 提高了性能。
【问题讨论】:
最近在 pypy-dev 邮件列表中讨论了真实世界的性能数据。在使用 PyPy 1.7 和 psycopg2ct 运行大型站点时,我得到了类似的结果。目前基于 ctypes 的 PostgreSQL 驱动程序(psycopg2ct 或 pypq)似乎阻止了典型 Django 应用程序的显着加速。此外,您需要考虑 JIT 的长时间预热。查看从mail.python.org/pipermail/pypy-dev/2011-October/008499.html开始的线程 psycopg2cffi 项目似乎将数据库适配器的性能提升到了一个新的水平。见chtd.ru/blog/bystraya-rabota-s-postgres-pod-pypy/?lang=en 有关将 PostgreSQL 与 PyPy 结合使用的不同选项的更多信息,请参阅***.com/a/13663976/15770 【参考方案1】:不太可能。 Django 应用程序几乎总是 I/O-bound,通常是因为数据库连接。 PyPy 根本无济于事,即使它是纯粹兼容的(我不确定它是否兼容)。
【讨论】:
@Stanislav Feldman:分析它以查看瓶颈在哪里,然后从那里开始。如果您需要更多帮助,请在此处发布分析结果。 过早的优化是个坏主意。在您开始之前,该项目非常为时过早。 我不明白为什么“在开始项目之前进行优化”是一个坏主意......毕竟,你没有什么可失去的,你一开始做出的错误决定只会增加维护之后的负担。 @Jonathan 该图表充其量只是误导。如果你查看actual benchmark for Django,它只测试模板渲染:这确实是依赖于 CPU 的,但只是整个请求周期的一小部分。我的意见不变。 模板渲染是请求周期中最难的部分,假设您的查询足够快(在我的情况下,所有查询都在不到 10 毫秒的时间内完成,但模板渲染大约需要 100-200 毫秒)【参考方案2】:视情况而定。
PyPy 确实提高了 PyPy 基准套件中所有基准的性能。目前这只是模板渲染,但没有人提交任何其他内容。然而,可以安全地假设性能关键代码会更快(尤其是经过一些调整之后)。
兼容性方面的数据库有点问题,因为只有 sqlite 可以工作,而且速度很慢(不过有一个分支可以修复它)。例如,人们还报告 pg8000 使用 sqlalchemy,但我没有第一手经验。
干杯, 菲哈尔
【讨论】:
【参考方案3】:我用 PyPy + Django 做了一些实验。主要有两个问题:
大多数数据库适配器和其他第三方模块无法使用 PyPy 编译(即使 wiki 说可以)。
我认为一台服务器可能会从 JIT 编译中受益,因为它在某些请求中进行了花哨的计算,但内存占用增加了,这可能是因为 JIT 存储的跟踪结果对每个请求都是唯一的,因此从未重用?
理论上,如果您的服务器正在执行有趣的计算、使用纯 Python 模块并且在内存中有大量对象(因为在某些情况下 PyPy 可以减少每个对象使用的内存),PyPy 可能是一个胜利。否则,JIT 更高的内存要求将成为一个障碍,因为它减少了内存缓存的机会,并且可能需要额外的服务器来运行足够的服务器进程。
【讨论】:
以上是关于Django 与 PyPy的主要内容,如果未能解决你的问题,请参考以下文章
Django RESTful API - django-piston 与 django-tastypie
将现有的 django 应用程序与 django-cms 集成