flask+apache,每一个请求过来,是重新执行flask文件吗?

flask部署在apache上,每一个请求过来的时候,是重新执行app.py的文件吗?
怎样才能像直接运行flask文件一样,让它能在指定的地址和端口监听,而不用重新运行app.py

阅读 3.8k
3 个回答

apache的部署方式,我没有使用过。我一般是是用nginx+uwsgi来部署flask的。

uwsgi --uid os373 --gid os373 --ini /var/www/pybolg/pyblog_uwsgi.ini

上面的代码是使用uwsgi来部署我的flask程序的。执行成功之后的log日志是这样的。

图片描述

所以,我个人认为,你用uwsgi执行了flask项目之后,项目的相关内容已经加载到了内存。所以,不会每次url请求都重新执行app.py。但是,但是.....

每个网页浏览器要浏览url的时候,都要重新执行一下 view 视图函数里的内容。

你要一直运行,考虑这样:flask跑起来监听一个端口,比如3000,apache/nginx配置反向代理,把80端口代理到3000上。

参考配置:

<VirtualHost *:80>
    ServerName abc.com
    ProxyPass           "/" "http://localhost:3000/"
    ProxyPassReverse    "/" "http://localhost:3000/"
</VirtualHost>

flask启动文件只会执行一次,不可能来个请求就创建一个app核心对象吧,所以用生产服务器启动以后由主线程来执行启动文件,之后进来的请求都是由flask创建的子线程去完成的。

在下没有用过apache,但是代码里只要有

if __name__ == '__main__':
    通过生产服务器启动的话,这里的app.run()就不会执行

一点自己的想法,希望对养猪哥有所帮助

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题