以前玩python 开发的时候写过一些见解,推荐阅读:
部署服务器除了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 函数来启动服务器以处理用户请求
在Python中,waitress`是一个用于提供 WSGI (Web Server Gateway Interface) 应用程序的纯 Python Web 服务器
waitress`服务器提供了一种轻量级、高效的方式来运行 WSGI 应用程序,通常用于生产环境中
使用之前先导入包:from waitress import 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 的值,如果不存在,则默认值为 False
if not _quiet: # pragma: no cover
# idempotent if logging has already been set up
logging.basicConfig()
server = _server(app, **kw)
if not _quiet: # pragma: no cover
server.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 shutdown
import os
import profile
import pstats
import tempfile
fd, 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 useful
stats.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)
假设有一个名为 myapp 的 WSGI 应用程序,可以使用 waitress 来启动该应用程序并监听 HTTP 请求,如下所示:
from waitress import serve
from myapp import app
serve(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 serve
if __name__ == "__main__":
print("服务启动成功: http://127.0.0.1:5678/")
serve(app, host='0.0.0.0', port=5678)
print("退出")
截图如下: