【问题标题】:Adding HTTP endpoint to a small python application将 HTTP 端点添加到小型 python 应用程序
【发布时间】:2022-01-20 06:54:20
【问题描述】:

我正在寻找有关创建带有嵌入式 HTTP 端点的小型 python 应用程序的最佳方法的指导。

此应用程序将执行它自己的周期性任务,但它也应该通过 HTTP 请求接受外部命令。

我已经检查了一些标准的 Python HTTP 服务器,比如 Flask,但它们似乎是针对更复杂的 Web 应用程序的,并将“应用程序”作为 WSGI 服务器的插件运行。感觉应用程序足够小,我宁愿避免使用一些大框架。更重要的是,Flask 似乎以“请求-响应”模型为中心,这对于纯 Web 服务器可能很好,但不适合我的应用程序(因为 http 请求只是它的众多输入之一)。

我应该在单独的 python 线程中运行 http.server 还是有更好的解决方案?

【问题讨论】:

  • 几个问题:是否有最低性能要求?它是针对生产还是本地项目?您能否为您的应用程序提供其他输入示例?您的项目需要多少“轻量级”?
  • 它是一个开发工具,因此在性能上没有硬性界限,但我希望它表现得合理。毕竟,它只是从套接字读取数据。关于“轻量级”的程度——我想避免坚持像 Django 这样的庞大框架,所有的花里胡哨。我正在为一个简单的问题寻找一个相当简单的解决方案。

标签: python http server


【解决方案1】:

没有任何具体的例子,这有点难以提供帮助。但 Flask 是一个微框架,所以我怀疑你会发现比这更小的。

您还可以查看 FastAPI,它的构建类似于 Flask。

您的设计的主要问题是服务器既充当任务的发送者又充当任务的接收者,如果某些事情不起作用,最终可能会给您带来问题。

更好的设计是拥有一个监听 HTTP 请求的服务器,以及一个定期向服务器发出 HTTP 请求的调度程序服务 - 这样您还可以在解耦时分别为每个请求构建测试来自系统“执行者”部分的“发行者”——如果需要,它们中的每一个都可以驻留在不同的系统上。

最简单的解决方案可能是:

  • 一个运行 FastAPI/Flask 的简单 python 文件
  • crontab 作业发布请求

【讨论】:

  • 我认为您对“服务器既充当任务的发送者又充当任务的接收者”的印象是错误的。一些外部命令(读取 webhook)被 3rd 方系统调用,应该被服务器接收,也可能导致一些长时间的计算。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-05-15
  • 2020-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-10
相关资源
最近更新 更多