前后端知识库 前后端知识库
首页
    • JavaScript
    • React
    • Vue
  • Python
  • Sanic
  • Linux
  • Ansible
归档
GitHub (opens new window)
首页
    • JavaScript
    • React
    • Vue
  • Python
  • Sanic
  • Linux
  • Ansible
归档
GitHub (opens new window)
  • Sanic

    • 开始
    • Routing
    • 请求数据
    • 响应
    • 静态资源
    • 异常
    • 中间件 和 监听器
    • 蓝图
    • WebSocket
    • 配置
    • Cookies
    • 处理装饰器
    • 流
    • 基于类的视图
    • 自定义协议
    • SSL 例子
    • 日志
    • 测试
    • 部署
      • 工作进程
      • 在终端运行
      • 在 Gunicorn 运行
      • 异步支持
    • 扩展
    • 贡献
    • API Reference
  • Python

  • backend
  • Sanic
devin
2023-09-07

部署

# 部署

部署 Sanic 由内建的 web 服务器简化。在定义一个 sanic.Sanic 实例后,我们可以使用如下关键字参数调用 run 方法:

  • host (默认 "127.0.0.1"): 主机服务器地址。
  • port (默认 8000): 主机服务器端口。
  • debug (默认 False): 启动调试输出 (减缓服务器速度).
  • ssl (默认 None): 为工作进程的 SSL 加密的 SSLContext。
  • sock (默认 None): 服务器接受连接的套接字。
  • workers (默认 1): 产生的工作进程的数量。
  • loop (默认 None): 一个兼容 asyncio 的事件循环。如果 none 被指定,Sanic 会建立自己的事件循环。
  • protocol (默认 HttpProtocol): asyncio.protocol (opens new window) 的继承。

# 工作进程

默认情况下,Sanic 使用一个 CPU 核心在主程序中监听。为了加速,只需在 run 参数里指定 workers 工作进程的数量。

app.run(host='0.0.0.0', port=1337, workers=4)
1

Sanic 会自动启动多个进程并且在它们之间路由流量。我们建议尽可能多得根据你有的 CPU 核心数量。

# 在终端运行

如果你喜欢使用命令行参数,你可以通过执行这个模块启动一个 Sanic 服务。例如,如果你在一个名叫 server.py 文件里初始化了一个叫做 app 的 Sanic 应用,你可以运行服务如下:

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

这种运行 sanic 的方式,不需要在你的 Python 文件中调用 app.run。如果你这样做了,确保包装了它以便它只在解释器运行时执行。

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

# 在 Gunicorn 运行

Gunicorn (opens new window) ‘Green Unicorn’ 是一个 UNIX 下的 WSGI HTTP 服务器。这是一个从 Ruby 的 Unicorn 项目移植过来的预分叉工作者模型。

为了用 Gunicorn 运行 Sanic 应用程序,你需要为 Gunicorn worler-class 参数使用特定的 sanic.worker.GunicornWorker:

gunicorn myapp:app --bind 0.0.0.0:1337 --worker-class sanic.worker.GunicornWorker
1

如果你的应用程序遭受内存泄漏,你可以将 Gunicorn 配置为在处理完指定数量的请求后正常重启工作程序。这是一种便利的方法来帮助限制内存泄漏的影响。

查看 Gunicorn Docs (opens new window) 获取更多信息。

# 异步支持

如果你 需要 分享 sanic 进程给其他应用程序,特别是 loop,这非常合适。但是请注意,此方法不支持使用多个进程,并且一般来说这不是最佳运行应用的方式。

这是一个不完整的例子 (请参考示例中的 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()
1
2
3
4
编辑 (opens new window)
上次更新: 2023/09/07, 12:09:00
测试
扩展

← 测试 扩展→

Theme by Vdoing | Copyright © 2023-2023 devin | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式