如何在 uwsgi 配置中传递自定义参数?

1、 uwsgi.ini参数解释

必须要以 [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的路径都要改成 “上一级父目录/指定文件”,在该案例中,
    module = cftemp.test1:app
    wsgi-file = cftemp/test1.py
  • 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端口生效。

(1)更多参数参考:

官网:Python/WSGI应用快速入门
uwsgi 常用配置参数说明
uwsgi常用参数详解

(2)其他相关知识

python web开发之 WSGI/uwsgi/uWSGI区别
uwsgi的一些课外知识:uwsgi、uWSGI、WSGI、web服务器、应用服务器、socket

2、测试案例

普通项目部署可参考:
使用uwsi部署flask服务
uwsgi的http和socket使用案例


以下是在uwsgi配置中 自定义参数的案例~~~~
简单举了uwsgi直接接受http请求的情况,如果你使用nginx代理,需要把配置文件中的 http 改成 socket 或 http-socket。具体可参考官网:Python/WSGI应用快速入门

2.1 项目目录

/home/hema/cftemp:
– test1.py
– uwsgi.ini

2.2 方案

  • 如果.py文件中是通过sys.argv[xx]来取值,则在.ini文件中直接配置:pyargv=参数值
  • 如果.py文件中是通过argparse来取值,则在.ini文件中配置:pyargv= --参数名 参数值

方案一:sys.argv[xx]取值

(1)flask项目,命名test1.py


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)

(2)uwsgi.ini

[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

(3)启动命令

以下命令均在/home/hema/cftemp目录下执行:
启动:uwsgi --ini uwsgi.ini
重启:uwsgi --reload a.pid
杀死:uwsgi --stop a.pid

(4)测试

curl http://127.0.0.1:9300/hello
输出:你好啊~hello world~接受到参数HUMAN

方案二:argparse取值

(1)flask项目,命名test1.py

'''
@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)

(2)uwsgi.ini

[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

(3)启动命令

同方案一

(4)测试

curl http://127.0.0.1:9400/hello
输出:HELLO WORLD!!!HUMMAN

你可能感兴趣的:(网络通信,java,web开发,flask,python,后端)