21. 开发模式
你的鼓励是我前进的动力,请为我点个赞吧!
(1)开发模式
Sanic的开发模式基于内置的websocket,通过创建sanic.Sanic的实例,我们可以传递以下参数进行配置:
选项 | 说明 |
---|---|
host | 服务主机地址(默认值127.0.0.1) |
port | 端口(默认值8000) |
debug | 是否打开调试模式(默认值:False) |
ssl | ssl上下文 |
sock | 服务器允许接受的的地址 |
workers | 用户异步的进行数量 |
loop | 用于创建的循环事件 |
protocol | 协议,为asynico.protocol的子类 |
access_log | 是否开启日志处理功能 |
(2)运行数量控制
默认情况下Sanic使用主进行监听CPU的数量,如果想要提高执行效率只需要在app.run()中指定worker的参数即可,具体如下所示:
app.run(host='0.0.0.0', port=1337, workers=4)
Sanic将会自动调整进行的执行,建议根据电脑的核数调整workers的数量,最好是让二者相等。
(3)通过命令行运行
Sanic为开发者提供了命令行的启动方式例如:
python -m sanic server.app --host=0.0.0.0 --port=1337 --workers=4
(4)通过Gunicorn运行
Gunicorn是wsgi的在linux上的服务,
unicorn myapp:app --bind 0.0.0.0:1337 --worker-class sanic.worker.GunicornWorker
(5)禁用调试模式的日志功能
一般为了提高性能要禁用一些功能,如调试,登录日志。
app.run(host='0.0.0.0', port=1337, workers=4, debug=False, access_log=False)
使用Gunicorn启动:
env SANIC_ACCESS_LOG="False" gunicorn myapp:app --bind 0.0.0.0:1337 --worker-class sanic.worker.GunicornWorker --log-level warning
或者直接关闭日志功能:
app.config.ACCESS_LOG = False
(6)异步模式
开发者可能使用很多应用,要注意loop的使用。这个方法不支持很多进程,运城app没有足够的优势。下面给出一个完成的示例:
server = app.create_server(host="0.0.0.0", port=8000)
loop = asyncio.get_event_loop()
task = asyncio.ensure_future(server)
loop.run_forever()