flask+gunicorn部署

1、flask

flask实际上就是用来作为python部署服务的框架,方便别人调用你写的服务。本文主要记载下自己的使用过程

1.1、flask安装

pip install flask

1.2、flask导入

from flask import Flask

1.3、flask实例化

app = Flask(__name__)

1.4、flask绑定路由

绑定路由的作用是,通过路由绑定一个视图函数@app.route('/'): 告诉Flask哪个URL才能出发对应的函数。

# 1. 导入Flask类;

from flask import  Flask

 

# 2. 实例化一个Flask对象;

#     __name__是模块的名称或者包的名称

#     作用: 根据这个参数确定flask应用的路径, 从而快速查找模板和html文件的默认路径;

#     模块就是python文件; 包就是目录(跟普通目录多加一个__init__.py);

#

app = Flask(__name__)

 

# 3-1.基本路由:通过路由绑定一个视图函数

#   @app.route('/'): 告诉Flask哪个URL才能出发对应的函数, 又称为路由;

#   对应定义了一个视图函数, 也就是返回给用户浏览器显示的内容;

@app.route('/')

def index():

    return  "<h1>hello world</h1>"

 

@app.route('/login/')

def login():

    return  "login"

 

# 4. 运行Flask应用, 可以指定ip和端口;

# '0.0.0.0' 所有的IP都可以访问到;

app.run('0.0.0.0', 9000)

比如你想调取login这个应用,就是在url为0.0.0.0:9000/login/。

1.5、flask蓝图

蓝图主要是为了方便多个应用扩展使用的,每当我们想加一个app时都可以通过蓝图注册,然后通过绑定一个不同的路由来实现。蓝图注册如下:

color = Blueprint('color_tagging', __name__)

注册蓝图后绑定路由也不再是app.route,而是你蓝图注册的名字‘color’

@color.route(rule='/get', methods=['GET'])

然后再如下进行app的注册

#实例化一个Flask类
app = Flask(__name__)
#注册蓝图
app.register_blueprint(color, url_prefix='/color_tagging')
if __name__ == '__main__':
    app.run(host='0.0.0.0', debug=True)

2、gunicorn

2.1、安装gunicorn

pip install gunicorn

2.2、gunicorn启动flask服务

gunicorn app.flaske:app --config bin/gunicorn_config.py

这里app.flaske是我app实例化的py文件所在地,--config后面是gunicorn配置文件的路径

2.3、gunicorn配置文件

import os

#docker环境部署时获取指定的端口,没有就用默认的
port = os.getenv('PORT', '8080')
#docker环境部署时获取指定的ip地址,没有就用默认的
ip = os.getenv('IPADDR', '0.0.0.0')
bind = '{0}:{1}'.format(ip, port)
# docker环境部署时,os.cpu_count()获取到的cpu核数为物理机核数,实际分不到那么多资源
workers = int(os.getenv('CPU_COUNT', 4))
print('Child process number: {} with port: {}'.format(workers, port))

keepalive = 60
timeout = keepalive + 1
graceful_timeout = 1
backlog = 1

proc_name = 'gunicorn_test'
preload_app = True
log_path = os.getenv('MATRIX_APPLOGS_DIR')
if not os.path.exists(log_path):
    os.makedirs(log_path)


#控制gunicorn打的日志结构
logconfig_dict = dict(
    version=1,
    disable_existing_loggers=False,
    loggers={
        "gunicorn.error": {
            "level": "INFO",
            "handlers": ["error_console", "error_file"],
            "propagate": True,
            "qualname": "gunicorn.error"
        },
        "gunicorn.access": {
            "level": "INFO",
            "handlers": ["access_file"],
            "propagate": True,
            "qualname": "gunicorn.access"
        }
    },
    handlers={
        "error_console": {
            "class": "logging.StreamHandler",
            "formatter": "generic",
            "stream": "ext://sys.stderr"
        },
        "access_file": {
            "class": "logging.FileHandler",
            "formatter": "simple",
            "filename": os.path.join(log_path, 'access.log')
        },
        "error_file": {
            "class": "logging.FileHandler",
            "formatter": "generic",
            "filename": os.path.join(log_path, 'error.log')
        }
    },
    formatters={
        "generic": {
            "format": "%(asctime)s,%(msecs)03d | %(process)d | %(module)s | %(levelname)s | %(message)s",
            "datefmt": "%Y-%m-%d %H:%M:%S",
            "class": "logging.Formatter"
        },
        'simple': {
            "format": "%(message)s",
            "class": "logging.Formatter"
        }
    }
)

2.4、gunicorn日志

app = Flask(__name__)
gunicorn_logger = logging.getLogger('gunicorn.error')
app.logger.handlers = gunicorn_logger.handlers
app.logger.setLevel(gunicorn_logger.level)

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值