我有一个通过 exec() 和 cgi 执行 Python 脚本的 php 应用程序。
我有很多页面可以做到这一点,虽然我知道 WSGI 是长期发展的更好方式,但我想知道对于中小流量这种安排是否可以接受。
我问是因为一些帖子提到 Apache 必须为 Python 解释器的每个实例生成一个新进程,这会增加开销,但我不知道它对于一个较小的项目有多大意义。
谢谢你。
在 CGI 的情况下,服务器每次收到请求时都会启动 PHP 解释器的副本。PHP 依次启动 Python 进程,该进程在 exec() 之后被终止。启动两个进程并在每个请求上执行所有导入都会产生巨大的开销。
在 FastCGI 或 WSGI 的情况下,服务器保持几个进程预热(运行进程的最小和最大数量是可配置的),因此以一些内存为代价,您每次都无需启动新进程。但是,您仍然必须在每次 exec() 调用时启动/停止 Python 进程。如果您可以在没有 exec() 的情况下使用 Python 应用程序,例如将 PHP 部分移植到 Python,它将大大提高性能。
但是正如您提到的,这是一个小项目,因此唯一重要的标准是您当前的服务器是否可以承受当前负载。