PHP Exec()和Python脚本的可伸缩性

PHP Exec()和Python脚本的可伸缩性,php,python,exec,Php,Python,Exec,我有一个php应用程序,它通过exec()和cgi执行Python脚本 我有很多页面可以做到这一点,虽然我知道WSGI是一种更好的长期方式,但我想知道对于中小型流量来说,这种安排是否可以接受 我这样问是因为有几篇文章提到Apache必须为Python解释器的每个实例生成一个新的进程,这会增加开销,但我不知道这对于一个较小的项目有多重要 多谢各位 对于CGI,服务器每次收到请求时都会启动一个PHP解释器副本。PHP反过来启动Python进程,该进程在exec()之后被终止。启动两个进程并对每个请求

我有一个php应用程序,它通过exec()和cgi执行Python脚本

我有很多页面可以做到这一点,虽然我知道WSGI是一种更好的长期方式,但我想知道对于中小型流量来说,这种安排是否可以接受

我这样问是因为有几篇文章提到Apache必须为Python解释器的每个实例生成一个新的进程,这会增加开销,但我不知道这对于一个较小的项目有多重要


多谢各位

对于CGI,服务器每次收到请求时都会启动一个PHP解释器副本。PHP反过来启动Python进程,该进程在exec()之后被终止。启动两个进程并对每个请求执行所有导入操作会产生巨大的开销

在FastCGI或WSGI的情况下,服务器会使两个进程保持预热状态(运行进程的最小和最大数量是可配置的),所以以一些内存为代价,您可以避免每次启动新进程。但是,在每次exec()调用中,仍然必须启动/停止Python进程。如果您可以在不使用exec()的情况下使用Python应用程序,例如将PHP部分移植到Python,则会大大提高性能


但正如您所提到的,这是一个小项目,因此唯一重要的标准是您当前的服务器是否能够承受当前负载。

就我个人而言,如果您要获得超过几个并发用户,您可以很快建立大量孤立进程,而且您的脚本可以完全锁定python并停止响应“小”流量,虽然这是黑客,它不应该是一个问题。对于“中等”流量,我不会这样做。除了锁定问题外,您还存在“进程缓慢”问题、机器人等-重新加载或流量峰值会使您的机器过载。现在让wsgi在pyramid/Battle/etc中运行python脚本非常简单。对于小流量,您可能也可以使用crontab来处理数据,通过数据库或文件系统中的队列和dropbox来处理数据。谢谢Jonathan。所以,如果我想使用WSGI,您会建议安装mod_WSGI(我使用apache for PHP)和web框架(比如CherryPy)吗?然后使用其他PHP函数来执行脚本,而不是使用exec()?