代码之家  ›  专栏  ›  技术社区  ›  user437038

巨蟒加速器

  •  3
  • user437038  · 技术社区  · 14 年前

    我计划使用python开发一个Web应用程序。有人知道Python的加速器吗?(类似eaccelerator或apc for php)如果没有,有没有办法缓存预编译的python字节码? 关于python和php性能比较的任何想法(假设db/网络延迟相同)

    事先谢谢。

    4 回复  |  直到 14 年前
        1
  •  3
  •   Graham Dumpleton    14 年前

    其他人提到了python字节代码文件,但这在很大程度上是不相关的。这是因为除了CGI之外,python的宿主机制在请求之间保持python web应用程序在内存中。这与PHP不同,后者在请求之间有效地丢弃应用程序。因此,python不需要加速器,因为python web托管机制的工作方式可以避免php遇到的问题。

        2
  •  8
  •   S.Lott    14 年前

    这有个诀窍。

    它叫 mod_wsgi .

    它的本质就是这样工作的。

    1. 对于“静态”内容(.css,.js,images等),将它们放在一个目录中,这样Apache就可以为它们提供服务,而您的python程序不知道它们是被发送的。

    2. 对于“动态”内容(主HTML页面本身),您使用 莫迪WSGI 分叉运行在Apache外部的“后端”进程。

    这比PHP快,因为现在有几件事情同时发生。Apache已将请求发送到后端进程,然后在后端仍在运行第一个请求时继续处理下一个请求。

    另外,当您发送HTML页面时,后续请求由Apache处理,而您的Python程序不知道或不关心发生了什么。这导致了巨大的加速。与巨蟒的速度无关。一切都与整体架构有关。

        3
  •  5
  •   Alex Martelli    14 年前

    只要您在“主脚本”(直接调用的脚本)中完成少量的工作 python 它得到一个 __name__ 属于 __main__ )您不必担心“缓存预编译的python字节码”:当 import foo , foo.py 保存到磁盘(同一目录)作为 foo.pyc ,只要该目录是可写的,就可以对字节码进行已经很便宜的编译。 一旦 然后“永远在”python将加载 Py.Pyc 直接在每一个新的过程中 进口货 --在一个过程中,每个 进口货 除了第一个就是快速查找内存中的字典 sys.module 字典)。python中的核心性能思想:确保 每一个 一些实质性的代码发生在 def 模块中的语句-- 不要 在模块顶层,在主脚本中,或者特别是在 exec eval 语句/表达式!-)

    我没有针对php和python的基准测试,但是我注意到python在每一个新版本中都得到了显著的优化,所以如果你想看到“最快的python”,一定要比较最近的版本(idealy 2.7,至少2.6)。如果你还不够快, cython (一种旨在直接编译成C的Python方言,然后再编译成机器代码,有一些限制)现在是有选择地优化那些分析显示您需要的模块的最简单方法。

        4
  •  2
  •   edorian    14 年前

    编译后的python字节码会自动缓存在我见过的每个环境中的.pyc文件中。据我所知,还有什么事情需要做。

    如果要直接生成这些文件,可以使用: http://docs.python.org/library/py_compile.html