必须要以 [uwsgi] 开头!
- 1)callable参数不是必须的:但只限“① 当Python WSGI 应用是在你模块的根级别定义(即在py文件内定义,而不是在方法或类内定义),② 而且你的应用名称是application时”,该参数才可省略!否则必须注明对应的应用名!!
- 2)http 或 http-socket:用于设置单独使用uWSGI作为web服务器,并通过http访问服务;
socket:用于配置了nginx代理,客服端发起的请求先到nginx,再代理到uWSGI服务器,最后发送给flask或Django应用。- 3)如果是Dijango,无论module 或 wsgi-file的路径都必须以 “上一级父目录”开头!例如,在该案例目录结构下,如果使用Dijango,则:
module = cftemp.test1:app
wsgi-file = cftemp/test1.py
如果是Flask,则直接以文件名开头即可(具体参考本案例)。- 4)参数的key、value之间的空格可有可无。既可写成master = true,也可master=true。
- 5)uwsgi.ini中指定的监听端口和 test.py中指定的port无关。如果使用uwsgi启动test1.py,则 uwsgi.ini中的9300端口生效;如果使用python test1.py直接启动,则test1.py中指定的5000端口生效。
官网:Python/WSGI应用快速入门
uwsgi 常用配置参数说明
uwsgi常用参数详解
python web开发之 WSGI/uwsgi/uWSGI区别
uwsgi的一些课外知识:uwsgi、uWSGI、WSGI、web服务器、应用服务器、socket
普通项目部署可参考:
使用uwsi部署flask服务
uwsgi的http和socket使用案例
以下是在uwsgi配置中 自定义参数的案例~~~~
简单举了uwsgi直接接受http请求的情况,如果你使用nginx代理,需要把配置文件中的 http 改成 socket 或 http-socket。具体可参考官网:Python/WSGI应用快速入门
/home/hema/cftemp:
– test1.py
– uwsgi.ini
from flask import Flask
import sys
import argparse
import logging
app = Flask(__name__)
@app.route('/hello')
def hello():
# 获取pyargv参数
arg = str(sys.argv[1])
return f"你好啊~hello world~接受到参数{arg}"
if __name__ == '__main__':
# 启动服务
ip = "0.0.0.0"
port = 5000
logging.info('启动服务, ip地址:{}, 端口:{}'.format(ip, port))
app.run(host=ip, port=port, debug=True, use_reloader=False)
[uwsgi]
chdir=/home/hema/cftemp/
# flask写法:第一种
module = test1:app
# flask写法:第二种-同时配置wsgi-file和callable。
#wsgi-file=test1.py
#callable=app
pyargv=HUMMAN
master=true
processes=4
http=127.0.0.1:9300
daemonize=/home/hema/cftemp/a.log # 后台启动,并把日志写到a.log
pidfile=/home/hema/cftemp/a.pid # 记录uwsgi的主进程号
http-timeout=86400 # 连接最大超时
buffer-size=65535 # 传参最大范围,k
以下命令均在/home/hema/cftemp目录下执行:
启动:uwsgi --ini uwsgi.ini
重启:uwsgi --reload a.pid
杀死:uwsgi --stop a.pid
curl http://127.0.0.1:9300/hello
输出:你好啊~hello world~接受到参数HUMAN
'''
@Project :hippo-ai-py
@Author :cf
@Date :2023/8/11
@Desc :
'''
from flask import Flask
import sys
import argparse
import logging
app = Flask(__name__)
parser = argparse.ArgumentParser()
# dest指定了参数的命名空间属性,打印出来是Namespace(environ='prod'),可通过args.environ获取该属性值
parser.add_argument("--ENV", dest='environ', default='prod', help="Server environment")
args = parser.parse_args()
print(args)
#print(args.environ)
@app.route('/hello')
def hello():
return f"HELLO WORLD!!!!{args.environ}"
if __name__ == '__main__':
# 启动服务
ip = "0.0.0.0"
port = 5000
logging.info('启动服务, ip地址:{}, 端口:{}'.format(ip, port))
app.run(host=ip, port=port, debug=True, use_reloader=False)
[uwsgi]
chdir=/home/hema/cftemp/
# flask写法:第一种
module = test1:app
# flask写法:第二种-同时配置wsgi-file和callable。
#wsgi-file=test1.py
#callable=app
pyargv=--ENV HUMMAN
master=true
processes=4
http=127.0.0.1:9400
daemonize=/home/hema/cftemp/a.log
pidfile=/home/hema/cftemp/a.pid
http-timeout=86400
buffer-size=65535 # 设大的:wq
同方案一
curl http://127.0.0.1:9400/hello
输出:HELLO WORLD!!!HUMMAN