我有一个php应用程序,它通过exec()和cgi执行Python脚本。PHP Exec()和Python脚本可伸缩性
我有一些页面可以做到这一点,虽然我知道WSGI是更好的方式去长期,我想知道是否对于中小量的流量这种安排是可以接受的。
我问,因为一些帖子提到Apache必须为每个Python解释器实例产生一个新的进程,这会增加开销,但我不知道它对于一个较小的项目有多重要。
谢谢。
我有一个php应用程序,它通过exec()和cgi执行Python脚本。PHP Exec()和Python脚本可伸缩性
我有一些页面可以做到这一点,虽然我知道WSGI是更好的方式去长期,我想知道是否对于中小量的流量这种安排是可以接受的。
我问,因为一些帖子提到Apache必须为每个Python解释器实例产生一个新的进程,这会增加开销,但我不知道它对于一个较小的项目有多重要。
谢谢。
如果是CGI,服务器每次获取请求时都会启动一个PHP解释器的副本。 PHP反过来启动Python进程,它在exec()后被杀死。在启动两个进程和每个请求执行所有导入操作时会产生巨大的开销。
在FastCGI的或WSGI的情况下,服务器将夫妇进程升温(最小和正在运行的进程是可以配置的最高金额),因此在一些内存的价格您摆脱每次开始新的进程。但是,您仍然必须在每次exec()调用时启动/停止Python进程。如果你可以在不使用exec()的情况下使用Python应用程序,例如将PHP部分移植到Python中,它会提高性能。
但正如你所说,这是一个小项目,所以唯一重要的标准是如果你目前的服务器可以维持当前的负载。
亲自我不会这样做,如果你想获得更多的并发用户,你可以建立一吨的孤儿precesses很快也你的脚本可以锁定python完全停止响应 – Alex
'小'流量,作为这就是哈克,这应该不成问题。 '中等'流量,我不会这样做。除了锁定问题之外,您还有“缓慢的进程”问题,机器人等 - 重新加载或流量高峰会使您的计算机过载。 这些天,让wsgi在pyramid/bottle/etc中运行python脚本非常简单。对于小流量,您可能可以使用crontab来处理内容,通过数据库或文件系统中的队列和Dropbox分配任务。 –
谢谢乔纳森。所以,如果我想使用WSGI,你会推荐安装也许mod_wsgi(我使用PHP的PHP)和一个Web框架(如CherryPy)?然后,而不是使用exec()使用一些其他的PHP函数来执行脚本? – user1170192