Flask生产环境部署指南 | 复杂度-- 稳定性++ 性能++

零、前言

自上次用flask搭了个接口跑yolo以后,一直都很ok

直到有一天请求数突然多了起来...

只要有1个以上线程请求就崩掉

查了一下原来app.run()是用于开发环境测试用的

笑死,根本不保证稳定性和性能

在不需要复杂的代码修改了环境部署前提下,我实测了下面这种可以用于生产环境的部署方式:

一、安装gunicorn

pip install gunicorn

二、导入proxyfix

from werkzeug.middleware.proxy_fix import ProxyFix

三、加入代码

# 放在原来这个代码的位置
# app.run(host='0.0.0.0', port=5000)
app.wsgi_app = ProxyFix(app.wsgi_app)
app.run()

四、启动

gunicorn -w 5 -b 0.0.0.0:5000 flask_yolo:app

-w是线程数,RTX2080(8G)实测只能开5个,6个会显存溢出

-b是ip和端口

flask_yolo:app 我的python文件就是叫flask_yolo.py你的文件叫什么就放在前面,app不要动

五、守护进程

sudo apt-get install supervisor

安装好了以后要写一个配置文件

sudo touch /etc/supervisor/conf.d/config.conf
sudo gedi
  • 5
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
为了实现课程电商网站,我们可以使用Flask框架和MySQL数据库来构建网站,并使用PayPal API来处理付款。以下是一些步骤: 1. 首先,我们需要使用Flask和MySQL来构建网站。我们可以使用Flask的蓝图来组织我们的代码,并使用MySQL来存储我们的数据。 2. 接下来,我们需要使用PayPal API来处理付款。我们可以使用PayPal的Vue.js包装组件vue-paypal-checkout来实现这一点。我们可以将这个组件添加到我们的网站中,并使用它来处理付款。 3. 我们还需要使用python-dotenv和flask-cli自定义命令来管理我们的环境变量和启动我们的应用程序。我们可以使用python-dotenv来加载我们的环境变量,并使用flask-cli自定义命令来启动我们的应用程序。 ```python # 示例代码 from flask import Flask from flask_mysqldb import MySQL from paypalcheckoutsdk.core import PayPalHttpClient, SandboxEnvironment from paypalcheckoutsdk.orders import OrdersCreateRequest app = Flask(__name__) # 配置MySQL数据库 app.config['MYSQL_HOST'] = 'localhost' app.config['MYSQL_USER'] = 'root' app.config['MYSQL_PASSWORD'] = 'password' app.config['MYSQL_DB'] = 'mydatabase' mysql = MySQL(app) # 配置PayPal API client_id = 'YOUR_CLIENT_ID' client_secret = 'YOUR_CLIENT_SECRET' environment = SandboxEnvironment(client_id=client_id, client_secret=client_secret) client = PayPalHttpClient(environment) # 创建订单 request = OrdersCreateRequest() request.prefer('return=representation') request.request_body({ "intent": "CAPTURE", "purchase_units": [{ "amount": { "currency_code": "USD", "value": "100.00" } }] }) response = client.execute(request) print(response.result.id) # 自定义命令 @app.cli.command() def init_db(): cur = mysql.connection.cursor() cur.execute('CREATE TABLE IF NOT EXISTS courses (id INT, name VARCHAR(255), price FLOAT)') mysql.connection.commit() cur.close() print('Initialized the database.') # 蓝图 from flask import Blueprint bp = Blueprint('courses', __name__, url_prefix='/courses') @bp.route('/') def index(): cur = mysql.connection.cursor() cur.execute('SELECT * FROM courses') courses = cur.fetchall() cur.close() return render_template('courses/index.html', courses=courses) @bp.route('/<int:id>') def show(id): cur = mysql.connection.cursor() cur.execute('SELECT * FROM courses WHERE id = %s', [id]) course = cur.fetchone() cur.close() return render_template('courses/show.html', course=course) app.register_blueprint(bp) if __name__ == '__main__': app.run() ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值