1,Deploying(部署)

通过内置的websocket可以很简单的部署sanic项目,之后通过实例sanic.Sanic,我们可以运行run这个方法通过接下来的关键字参数

  • host (default "127.0.0.1"): Address to host the server on.

    • 默认的主机ip是127.0.0.1
  • port (default 8000): Port to host the server on.
    • 默认的端口是8000
  • debug (default False): Enables debug output (slows server).
    • 调试模式(默认是False)可以输出degug
  • ssl (default None)SSLContext for SSL encryption of worker(s).
    • 在ssl加密中(参数默认是空)
  • sock (default None): Socket for the server to accept connections from.
    • 接收连接数的socket是默认空
  • workers (default 1): Number of worker processes to spawn.
    • 运行程序的进程默认是1
  • loop (default None): An asyncio-compatible event loop. If none is specified, Sanic creates its own event loop.
    • 异步兼容的事件循环,如果没有,sanic将会创建自己的时间循环
  • protocol (default HttpProtocol): Subclass of asyncio.protocol.
    • 异步协议默认是HTTPProtocol协议

1.1workers

通过默认值,Sanic仅仅使用一核CPU来监听主程序的进程,为了压榨出果汁,恰好一定特殊数量的工人用run参数

app.run(host="127.0.0.1", port=8000, workers=4)

Sanic能够自动的多线程旋转上升,且在他们之间有路由指示,我们推荐尽可能多核的运行

1.2,运行via命令

如果你喜欢使用命令模式参数,你可以启动Sanic服务端执行模块,,如果你初始化一个Sanic为一个app对象在一个文件中,你可以运行这个服务文件执行以下代码:

python -m sanic server.app --host=0.0.0.0 --port=1337 --workers=4

通过这样的方式运行sanic,也不是引用app.run在Python中不是必须的,如果存在,确定要包起来,当解释器跳转执行的时候,它会被执行

if __name__ == '__main__':
app.run(host="0.0.0.0",port=1337, workers=4)

1.3,运行via Gunicorn

Gunicon'Green Unicorn' 是一个为UNIX服务的WSGI HTTP, 它是一个pre-fork 工作模块的端口,是从Ruby的Unicorn项目中来.

为了运行sanic应用,你需要从Gunicon的worker-class参数中使用特殊的sanic.worker.GunicornWorker

gunicorn myapp:app --bind 0.0.0.0:1337 

--worker-class sanic.worker.GunicornWorker

如果您需要与其他应用程序(尤其是循环)共享SANIC过程,那么这是合适的。但是,请注意,此方法不支持使用多个进程,并且通常不是运行应用程序的首选方法

更多信息,查看Gunicorn 文档

1.4,禁止调试的日志

要提高性能,请在运行参数中添加debug=false和access_log=false

app.run(host='0.0.0.0', port=1337, workers=4, debug=False, access_log=False)

通过gunicorn运行,您可以设置环境变量sanic_access_log=“false”

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

1.5,支持异步

如果您需要与其他应用程序(尤其是循环)共享SANIC过程,那么这是合适的。但是,请注意,此方法不支持使用多个进程,并且通常不是运行应用程序的首选方法。

以下是一个不完整的示例(请参阅示例中的run_async.py了解更实用的内容)

server = app.create_server(host="0.0.0.0", port=8000)
loop = asyncio.get_event_loop()
task = asyncio.ensure_future(server)
loop.run_forever()

sanic官方文档解析之Deploying(部署)和Extension(扩展)的更多相关文章

  1. sanic官方文档解析之Example(二)

    1,通过docker部署sanic项目 通过Docker和Docker Compose部署SANIC应用程序是一项很容易实现的任务,下面的示例提供了示例simple_server.py的部署 FROM ...

  2. sanic官方文档解析之Example(一)

    1,示例 这部的文档是简单的示例集合,它能够帮助你快速的启动应用大部分的应用,这些应用大多事分类的,并且提供给ini工作的连接代码: 1.1,基础示例 这部分示例集成了提供简单sanic简单的代码 单 ...

  3. sanic官方文档解析之Custom Protocols(自定义协议)和Socket(网络套接字)

    1,Custom Protocol:自定义协议 温馨提示:自定义协议是一个高级用法,大多数的读者不需要用到此功能 通过特殊的自定义协议,你可以改变sanic的协议,自定义协议需要继承子类asyncio ...

  4. sanic官方文档解析之路由

    1,路由,路由相当于一个网址的地址,来确定网址的位置和唯一性 当http://server.url/被允许访问服务器,当最后的"/"通过路由匹配到了业务逻辑处理的函数,将会返回一个 ...

  5. sanic官方文档解析之logging和request Data

    1,sanic的logging: Sanic允许有做不同类型的日志(通过的日志,错误的日志),在基于Python3的日志API接口请求,你必须具备基本的Python3的日志知识,在你如果想创建一个新的 ...

  6. sanic官方文档解析之下载和Configuration

    1,sanic框架是做什么的? sanic的官方网址:https://sanic.readthedocs.io/en/latest/ sanic框架是一个类似于flask框架的在Python3.5以上 ...

  7. sanic官方文档解析之ssl,debug mode模式和test(测试)

    1,ssl 示例: 可选择的SSLContent from sanic import Sanic import ssl context = ssl.create_default_context(pur ...

  8. sanic官方文档解析之streaming(流动,滚动)和class_based_views(CBV的写法)

    1,streaming(流媒体) 1.1请求流媒体 Sanic允许你通过流媒体携带请求数据,如下,当请求结束await request.stream.read()就会返回None,仅仅只有post请求 ...

  9. sanic官方文档解析之websocket(网络套接字)和handle decorators(处理程序装饰器)

    1,websocket(网络套接字) 在websocket上Sanic提供了一种简单使用的抽象化,来设置websocket(网络套接字) from sanic import Sanic from sa ...

随机推荐

  1. 【NOIP2016练习】T2 花花的聚会 (树形DP,倍增)

    题意: 花花住在 H 国.H 国有 n 个城市,其中 1 号城市为其首都.城市间有 n 1 条单向道路.从任意一个城市出发,都可以沿着这些单向道路一路走到首都.事实上,从任何一个城市走到首都的路径是唯 ...

  2. 【NOIP2016练习】T3 tree (树形DP)

    题意:一棵有N个结点的树,每个节点上有权值c[i] 需要选出若干结点,对于任意结点他的所有祖先都被选取且选取总个数不能超过lim 在此前提下使权值和最大 n,lim<=3000 思路:WA了1次 ...

  3. 快充 IC BQ25896 的 ICO (input current optimizer)

    ICO (input current optimizer) 手機接上 adapter 後, 手機裡的 charger IC bq25896 開始向 adapter 抽取 current 供給 batt ...

  4. Android调起地图导航

       想要使用导航功能可以使用各个地图的开放平台集成导航模块,如果不想集成也可以调起相关app导航 调起其他app首先得使用到该app包名,先贴出来 public final static Strin ...

  5. 牛客网 牛客练习赛11 D.求距离

    D.求距离 链接:https://www.nowcoder.com/acm/contest/59/D来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 32768K,其他语言6 ...

  6. Arduino可穿戴教程ArduinoIDE新建编辑源文件

    Arduino可穿戴教程ArduinoIDE新建编辑源文件 Arduino IDE新建源文件 Arduino IDE启动后默认就新建了一个源文件,如图2.20所示.新建的源文件名称是以sketch_开 ...

  7. JS没有contains方法,可以用indexof实现

    我们很多时候会不自觉的在js代码里对一个字符串进行如下操作: str.contains("substr"); 但是js里面没有这个方法去判断字符串str是不是包含substr,而j ...

  8. jsonp _____跨域请求实现

    请求如下: $.ajax({ type: "GET", async:false, url: "http://127.0.0.1:8080/Cross-site-reque ...

  9. java保留n位小数

    double x = 123456789.987654312; String.format("%.nf", x) n为保留的小数位,x必须为double类型. 例如保留3位小数 S ...

  10. array_map常用技巧

    array_map() 函数将用户自定义函数作用到数组中的每个值上,并返回用户自定义函数作用后的带有新值的数组. 简单来说 “array_map” 会对数组中的每一项进行处理,并返回处理后的数据. 定 ...