如何在 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的路径都必须以 “上一级父目录”开头!例如,在该案例目录结构下,如果使用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端口生效。
(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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
配置uWSGI,请按照以下步骤进行操作: 1. 安装uWSGI:首先,确保在你的虚拟环境安装了uWSGI。你可以使用pip命令进行安装: ``` pip install uwsgi ``` 2. 创建uWSGI配置文件:在项目的根目录下创建一个名为`uwsgi.ini`的文件,用于配置uWSGI。可以使用文本编辑器打开该文件。 3. 配置uWSGI参数:在`uwsgi.ini`文件,添加以下内容来配置uWSGI参数: ``` [uwsgi] http-timeout = 86400 http-timeout-keepalive = 86400 http-timeout-uwsgi = 86400 http = :6359 module = your_project_name.wsgi processes = 4 threads = 2 chmod-socket = 664 vacuum = true die-on-term = true ``` 请确保将`your_project_name`替换为你的Django项目的名称。 在这个例子配置了以下参数: - `http-timeout`:设置HTTP超时时间(以秒为单位)。 - `http-timeout-keepalive`:设置HTTP保持活动连接的超时时间(以秒为单位)。 - `http-timeout-uwsgi`:设置uWSGI与上游服务器之间的超时时间(以秒为单位)。 - `http`:指定uWSGI监听的HTTP地址和端口。 - `module`:指定Django项目的WSGI模块。 你还可以根据需要调整其他参数,如进程数(`processes`)和线程数(`threads`)等。 4. 启动uWSGI服务:在项目的虚拟环境,使用以下命令启动uWSGI服务: ``` uwsgi --ini uwsgi.ini ``` 确保在项目的根目录下运行此命令。 5. 测试uWSGI服务:在浏览器输入`http://localhost:6359`(或你在配置文件指定的地址和端口),如果一切顺利,你应该能够看到Django项目的响应。 通过上述步骤,你可以配置并启动uWSGI服务来运行Django项目。根据你的需求,你可以进一步调整uWSGI参数以优化性能。请确保uWSGI配置文件的路径和参数与你的项目相匹配,并根据需要进行修改。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值