目录
- 前言
- 1. 基本知识
- 2. serve源码分析
- 3. 基本操作
前言
以前玩python 开发的时候写过一些见解,推荐阅读:
- uwsgi启动django以及uwsgi.ini的配置参数详解
- Django框架零基础入门
部署服务器除了Flask还有`serve
在讲述serve之前,先讲述两者的对比
Flask 是一个轻量级的 Web 框架,而 serve 函数则是 waitress 服务器中的一个部分。
Flask:
-
Web 框架:
Flask`是一个用 Python 编写的 Web 框架,旨在让开发者能够快速构建 Web 应用程序
提供了路由、模板引擎、请求和响应处理、会话管理等功能,使得编写 Web 应用程序变得简单而灵活 -
WSGI 应用程序:
Flask 应用程序是符合 WSGI 规范的,因此可以在任何兼容的 WSGI 服务器上运行,例如 waitress、gunicorn、uWSGI 等 -
开发:
Flask 通常用于开发阶段,可以轻松地创建原型或中小型的 Web 应用程序,并提供丰富的扩展库以满足各种需求
Serve(waitress):
-
WSGI 服务器:
serve 函数是 waitress 服务器提供的一个函数,用于启动一个 WSGI 服务器,监听 HTTP 请求,并将其转发给指定的 WSGI 应用程序进行处理 -
生产部署:
serve 函数通常用于生产环境中,用于将 WSGI 应用程序(如 Flask 应用程序)部署到生产服务器上,以便处理真实的 HTTP 请求 -
性能和稳定性:
waitress 是一个专门用于生产环境的 WSGI 服务器,具有良好的性能和稳定性,可以处理大量的并发请求,同时提供了一些配置选项来优化服务器的行为
综上所述,Flask 是用于构建 Web 应用程序的框架,而 serve 函数是用于在生产环境中部署 WSGI 应用程序的服务器功能。
对此可以使用 Flask 来开发应用程序,并在部署时使用 serve 函数来启动服务器以处理用户请求
1. 基本知识
在Python中,waitress`是一个用于提供 WSGI (Web Server Gateway Interface) 应用程序的纯 Python Web 服务器
waitress`服务器提供了一种轻量级、高效的方式来运行 WSGI 应用程序,通常用于生产环境中
使用之前先导入包:from waitress import serve
2. serve源码分析
源码有助于深入了解:
主要是实现了 serve 函数的主要逻辑,包括根据传入的参数设置服务器的行为(如是否打印日志、是否启用性能分析等),以及启动 WSGI 服务器并监听 HTTP 请求的功能
# 接受参数 app,表示一个 WSGI 应用程序,以及其他关键字参数 kw
def serve(app, **kw):# _server 可以用于指定要使用的 WSGI 服务器的创建函数,默认为 create_server_server = kw.pop("_server", create_server) # 从关键字参数 kw 中取出键为 _server 的值,如果不存在,则默认值为 create_server# _quiet 用于控制是否打印日志信息,如果为 True,则不打印日志信息_quiet = kw.pop("_quiet", False) # 从关键字参数 kw 中取出键为 _quiet 的值,如果不存在,则默认值为 False# _profile 用于控制是否启用性能分析,如果为 True,则启用性能分析_profile = kw.pop("_profile", False) # 从关键字参数 kw 中取出键为 _profile 的值,如果不存在,则默认值为 Falseif not _quiet: # pragma: no cover# idempotent if logging has already been set uplogging.basicConfig()server = _server(app, **kw)if not _quiet: # pragma: no coverserver.print_listen("Serving on http://{}:{}") # 打印服务器监听的地址和端口信息if _profile: # 如果 _profile 为 True,即启用了性能分析,则执行以下代码块profile("server.run()", globals(), locals(), (), False)else:# 如果 _profile 不为 True,即未启用性能分析,则执行以下代码块# 启动 WSGI 服务器,开始监听 HTTP 请求,并将其传递给 WSGI 应用程序进行处理server.run()def serve_paste(app, global_conf, **kw):serve(app, **kw)return 0# 对 server.run() 进行性能分析,使用 profile 函数来执行,并打印分析结果
def profile(cmd, globals, locals, sort_order, callers): # pragma: no cover# runs a command under the profiler and print profiling output at shutdownimport osimport profileimport pstatsimport tempfilefd, fn = tempfile.mkstemp()try:profile.runctx(cmd, globals, locals, fn)stats = pstats.Stats(fn)stats.strip_dirs()# calls,time,cumulative and cumulative,calls,time are usefulstats.sort_stats(*(sort_order or ("cumulative", "calls", "time")))if callers:stats.print_callers(0.3)else:stats.print_stats(0.3)finally:os.remove(fn)
3. 基本操作
假设有一个名为 myapp 的 WSGI 应用程序,可以使用 waitress 来启动该应用程序并监听 HTTP 请求,如下所示:
from waitress import serve
from myapp import appserve(app, host='0.0.0.0', port=8080)
在此示例中,myapp 是 WSGI 应用程序模块,app 是应用程序实例
serve 函数将此应用程序启动在主机 0.0.0.0
和端口 8080
上,以便其他计算机可以通过该主机和端口访问您的应用程序
在实际操作中相差不了多少:
from interface_api import app
from waitress import serveif __name__ == "__main__":print("服务启动成功: http://127.0.0.1:5678/")serve(app, host='0.0.0.0', port=5678)print("退出")
截图如下: