我打算使用 Python 开发一个 Web 应用程序。有人对python的任何加速器有任何想法吗?(类似于 eAccelerator 或 apc for php)如果没有,有没有办法缓存预编译的 python 字节码?关于 python 和 php 之间性能比较的任何想法(假设 db/network 延迟相同)
提前致谢。
我打算使用 Python 开发一个 Web 应用程序。有人对python的任何加速器有任何想法吗?(类似于 eAccelerator 或 apc for php)如果没有,有没有办法缓存预编译的 python 字节码?关于 python 和 php 之间性能比较的任何想法(假设 db/network 延迟相同)
提前致谢。
这有一个窍门。
它被称为mod_wsgi
。
它的本质是这样的。
对于“静态”内容(.css、.js、图像等),将它们放在一个目录中,以便它们由 Apache 提供服务,而您的 Python 程序不知道它们已发送。
对于“动态”内容(主 HTML 页面本身),您mod_wsgi
可以派生一个在 Apache 之外运行的“后端”进程。
这比 PHP 快,因为现在有几件事同时进行。Apache 已将请求分派到后端进程,然后在后端仍在运行第一个请求时继续处理下一个请求。
此外,当您发送 HTML 页面时,后续请求将由 Apache 处理,而您的 Python 程序并不知道或关心发生了什么。这导致了巨大的加速。与 Python 的速度无关。一切都与整体架构有关。
只要你在你的“主脚本”(你直接调用的python
那个并得到一个__name__
of __main__
)中做一些微不足道的工作,你就不必担心“缓存预编译的 python 字节码”:当你import foo
,foo.py
被保存到磁盘时(相同的目录)foo.pyc
,只要该目录是您可写的,因此对字节码的已经很便宜的编译只发生一次,并且“永远” Python 将foo.pyc
直接加载到每个新进程中import foo
——在单个进程中,每个import foo
除了第一个只是快速查找内存中的字典(sys.module
字典)。Python 的核心性能理念:确保每一点实质性代码都发生在def
模块中的语句——在模块顶层、主脚本或 esp 中没有任何语句。在exec
和eval
语句/表达式中!-)。
我没有 PHP 与 Python 的基准测试,但我注意到 Python 在每个新版本中都得到了相当显着的优化,所以如果你想看到“禁食”,请确保比较最近的版本(最好是 2.7,至少 2.6) Python”。如果您还没有发现它足够快cython
(一种 Python 方言,旨在直接编译成 C,然后编译成机器代码,但有一些限制)是今天选择性优化那些分析表明您需要它的模块的最简单方法。
其他人提到了 Python 字节码文件,但这在很大程度上是无关紧要的。这是因为 Python 的托管机制(CGI 除外)在请求之间将 Python Web 应用程序保留在内存中。这与 PHP 在请求之间有效地丢弃应用程序不同。因此,Python 不需要加速器,因为 Python 网络托管机制的工作方式避免了 PHP 的问题。
在我见过的每个环境中,编译后的 python 字节码都会自动缓存在 .pyc 文件中。据我所知,有必要做任何其他事情。
如果要直接生成这些文件,可以使用:http ://docs.python.org/library/py_compile.html