flask后台部署套路(五)

现在想达到一个情况,本机使用windows开发,linux来运行代码,同时回到第三讲,里面讲到的gunicorn配置的是一个单进程,单线程的运行,这节课主要是目标是win+linux开发和运行分离、gunicorn多线程运行。
ps: 以下步骤推荐在普通用户下进行,尽量别在root用户下执行,为了文件的安全性。
查看自己账户下又哪些用户直接CD到/home下就可以看 如果手贱给删除了可以再创建用户

useradd zhang
passwd zhang

切换用户

su zhang

如果你前期镜像什么的都是在root账户下运行的为了方便到这里就别切换了。

  1. ~目录下创建第一个名为pro的文件夹,并且进入
mkdir pro
cd pro

并且再创建一个名为myweb的文件夹,并且进入
2. 开始进行文件共享

docker run -it -p 139:139 -p 445:445 --name smb -d --rm \
-v /root/pro:/pro \
dperson/samba \
-u "root;123" \
-s "flakspro;/pro/;yes;no;yes;all;all;all" \
-w "WORKGROUP" \
-g "force user= root" \
-g "guest account= root"

有时间可以和第四讲最后的指令进行对比加深印象
,运行如果报错,先看看你第四讲的容器是不是没关闭
3. 然后复制你虚拟机的ip 到windows环境下的运行里面写上

\\虚拟机ip

可以看到你的机器上出现了文件。
4. 映射网络文件到本地磁盘
截图太麻烦 这里就直接口述了 右键--映射网络驱动器--选择你自己喜欢的磁盘点击完成。
这时候去你的计算机下,会出现一个flaskpro(\虚拟机ip)(z:)的磁盘,接下来打开本地的pycharm,open文件夹,不需要newcreate选择刚才映射好的盘符,注意千万别直接写在盘符下,最好还是选中盘符下的文件夹,避免出现一些不可描述的错误。
5. 在pycharm中,myweb文件夹下,new一个pythonfile--index.py。
这里要说一下对于这个项目是否需要配置python配置,理论上是不需要的,因为你是在linux上运行的,但是有时候为了在开发的时候有代码提示,加快效率可以设置一下。
file--settings--project:myweb--project interpreter 选好python的路径,点ok就可以了,一般来说你在linux下安装了哪些插件,最好是在你本地的开发环境也安装一下,避免两边开发不同步。

from flask import Flask
myapp = Flask(__name__)

@myapp.route("/")
def hello():
    return "hello flask1.1"

@myapp.route("/abc")
def abc():
    return "hello abc1.1"
  1. 回到你的xshell里面,可以看到index.py和你外部的文件是同步的,现在我们需要做一个容器,直接采用第三课使用的镜像。
docker run --name myapp -d --rm -p 8082:5000 -v /root/pro/myweb:/app -v /root/conf/gunicorn.conf:/gunicorn.conf myflask:1.2 -w 1 --reload -c /gunicorn.conf index:myapp

注意看看第三课的镜像关没有,避免端口冲突。
注意这里多了一个--reload 可以在开发时使用,当代码发生改变时候能自动重启服务器,从而直接产生变化,只在开发环境用嗷!
7. 启动完成之后直接去windows环境下,打开浏览器访问

虚拟机ip:8082

出现网页,这个时候基本上能正常走通了。

  • 现在开始做一个测试
    先导入一个time模块 在/路由下,添加一个time.sleep(5)
from flask import Flask
import time
myapp = Flask(__name__)

@myapp.route("/")
def hello():
    time.sleep(5)
    return "hello flask1.1 徐霖-牛逼"

@myapp.route("/abc")
def abc():
    return "hello abc1.1"

在浏览器里面访问

虚拟机ip:8082

正常的情况是,这个页面会卡住5秒然后才会重新加载出来东西,如果此时访问第二个路由

虚拟机ip:8082/abc

这时候会发现,第二个路由也被迫阻塞了,这就是因为gunicorn在默认的配置下是单进程,单线程的。(进程和线程的关系不懂自己去百度一下)我们回到启动gunicorn的启动命令上来做解释

gunicorn -c /gunicorn.conf mytest:myapp

这个 -c 后面其实还有很多参数,具体的可以看第2课里面的链接。其中有一个是-k 这个参数有一个默认值sync代表同步阻塞,也就是说,当我们的/路由被阻塞了,那我们/abc也必须等待/运行完之后它才会运行。如何去改变这个值,我们可以通过设置gunicorn的默认配置文件去改变每一个work的线程数,它原本的默认值是1,也就是说它只有单线程,如果我们需要多线程来处理,每个进程它可以处理多少个线程,就需要在这里来设置了。一般建议这个值设置为每核的2-4倍。否则到了高并发服务器压力就过大了。

  • 加入线程。
  1. 关闭上一个容器
docker stop myapp
  1. 重新启动
docker run --name myapp -d --rm -p 8082:5000 -v /root/pro/myweb:/app -v /root/conf/gunicorn.conf:/gunicorn.conf myflask:1.2 -w 1 --reload --threads 2 -c /gunicorn.conf index:myapp

注意和第一个启动命令对比,多了一个--threads 2
3. 再次测试 发现即使/路由阻塞了,/abc也没有阻塞能正常加载出来数据。
ps: 如果设置成多线程模式,那我们的-k里面的值会变为gthread

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值