4

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

提前致谢。

4

4 回答 4

8

这有一个窍门。

它被称为mod_wsgi

它的本质是这样的。

  1. 对于“静态”内容(.css、.js、图像等),将它们放在一个目录中,以便它们由 Apache 提供服务,而您的 Python 程序不知道它们已发送。

  2. 对于“动态”内容(主 HTML 页面本身),您mod_wsgi可以派生一个在 Apache 之外运行的“后端”进程。

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

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

于 2010-09-01T14:40:07.987 回答
5

只要你在你的“主脚本”(你直接调用的python那个并得到一个__name__of __main__)中做一些微不足道的工作,你就不必担心“缓存预编译的 python 字节码”:当你import foo,foo.py被保存到磁盘时(相同的目录)foo.pyc,只要该目录是您可写的,因此对字节码的已经很便宜的编译只发生一次,并且“永远” Python 将foo.pyc直接加载到每个新进程中import foo——在单个进程中,每个import foo除了第一个只是快速查找内存中的字典(sys.module字典)。Python 的核心性能理念:确保一点实质性代码都发生在def模块中的语句——在模块顶层、主脚本或 esp 中没有任何语句。execeval语句/表达式中!-)。

我没有 PHP 与 Python 的基准测试,但我注意到 Python 在每个新版本中都得到了相当显着的优化,所以如果你想看到“禁食”,请确保比较最近的版本(最好是 2.7,至少 2.6) Python”。如果您还没有发现它足够快cython(一种 Python 方言,旨在直接编译成 C,然后编译成机器代码,但有一些限制)是今天选择性优化那些分析表明您需要它的模块的最简单方法。

于 2010-09-01T14:33:27.190 回答
3

其他人提到了 Python 字节码文件,但这在很大程度上是无关紧要的。这是因为 Python 的托管机制(CGI 除外)在请求之间将 Python Web 应用程序保留在内存中。这与 PHP 在请求之间有效地丢弃应用程序不同。因此,Python 不需要加速器,因为 Python 网络托管机制的工作方式避免了 PHP 的问题。

于 2010-09-01T23:51:27.827 回答
2

在我见过的每个环境中,编译后的 python 字节码都会自动缓存在 .pyc 文件中。据我所知,有必要做任何其他事情。

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

于 2010-09-01T14:30:39.840 回答