之前由于部署websocket应用,需要同时开启多个uWSGI应用,想着如果开几个应用就敲几行代码实在是太蠢,于是去看了以下官方文档,官方给出了emperor的实现方法,具体可以看 http://uwsgi-docs-zh.readthedocs.io/zh_CN/latest/Emperor.html
但是官方的说明文档对新手不是那么友好,不符合拿来就用的简单粗暴,下面附上我自己项目的实现方法,仅供参考。
先简单介绍以下我的项目的目的,我的项目是用flask搭建的一个服务器,需要在8000~8003这4个端口用uWSGI开启。
单独开一个应用使用的命令为
uwsgi --http :8000 --gevent 1000 --http-websockets --master --wsgi-file app.py --callable app
如果需要使用emperor可以将配置写入.ini文件
[uwsgi]
http = :8000
wsgi-file = run_server.py
gevent = 1000
http-websockets = true
master = true
callable = app
我将http端口号为8000~8003的四个ini文件放入项目路径下的/config/uwsgi,命名为8000.ini, 8001.ini, 8002.ini, 8003.ini
用ini启动一个uWSGI应用的命令为
uwsgi --ini (项目路径)/config/uwsgi/8000.ini
用emperor启动多个的命令为
uwsgi --emperor (项目路径)/config/uwsgi/ --vassal-set chdir=(项目路径) --daemonize /var/log/uwsgi/emperor.log
解释一下其中用到的配置参数,uWSGI 会将--emperor 后面跟的路径目录下所有满足要求的配置文件声称一个应用,--vassal-set可以给配置文件传参,--daemonize 表示后台运行并将日志输出到指定路径
关闭emperor
找到emperor的pid
kill -INT pid