【问题标题】:WSGI with RESTful post-processing带有 RESTful 后处理的 WSGI
【发布时间】:2017-03-09 11:36:20
【问题描述】:

我们有一个在 Apache Linux 下运行 Python3 的 WSGI 应用程序。

我们希望在确认通过 Web 服务器收到的请求/通知后与外部 API 交互

示例 WSGI python 代码:

def 应用程序(环境,start_response): 路径= environ.get('PATH_INFO', '') 如果路径 == “/ProcessTransact”: 导入系统 sys.stderr.write("进入 /ProcessTransact,检查有效性 ...\n" ) # 从 Post 参数等获取通知/请求的上下文,假设它是一个有效的 ... 状态 = '200 OK' body = b"用'200 OK'确认有效提交" response_headers = [ ('内容类型', '文本/html'), ('内容长度', str(len(body))) ] start_response(状态,response_headers) 返回[正文] # 我们已经确认了上述请求的上下文 # 我们想根据上下文做一个 HTTP POST # 当我们返回 [body] 时,我们丢失了处理线程 导入请求#或者其他的东西 sys.stderr.write("确认请求后在此处发布 RESTful 事务(我们从未到达此处)。\n")

我们的代码与示例代码略有不同(使用 Werkzeug)。

解决此问题的最佳方法是什么? 我们故意不使用任何框架(Werkzeug 除外),并且我们希望避免对架构进行大的更改(数千行代码)

谢谢你, 克里斯

【问题讨论】:

  • 感谢@GrahamDumpleton - 这些选项对我来说有点新。在 Exception 框架中使用“try”和“finally”是一种选择,我想知道以非预期方式使用 Exception 框架是否会在以后引起头痛。例如,如果一个人想要启动一系列 RESTful 交互。您指出“atexit”可能不可移植,因此可能不太理想。
  • WSGI和Python RESTful的区别是HHTP连接与线程的解耦吗?我想知道是否有类似简单的 Python RESTful 模块可以附加到 Apache Alias/Directory 的东西?
  • atexit 回调仅在进程关闭时有帮助。一个进程通常会在多个请求中存活,因此没有用。 WSGI 定义了 Web 服务器和 Python Web 应用程序之间的接口。 RESTful 应用程序是一种编写应用程序的风格。它需要类似 WSGI 的东西来连接到 Web 服务器。因此,您将需要 WSGI 和一个实现 WSGI 规范的服务器,以便能够与大多数托管 Python Web 应用程序的方式进行通信。您唯一的其他选择是实现自己的 API 的 Python 异步框架。
  • 我玩过“try”“finally”,但无法让它适用于这种模式。当 Python 处理“finally”时,“try”中的 Python return 会被丢弃。由于“尝试”代码的返回被丢弃,初始交易永远不会结束。我快速阅读了 Python 异步框架,但不确定它们是否合适。我正在尝试实现同步事务——结束一个事务,然后启动下一个事务。

标签: python-3.x wsgi restful-architecture


【解决方案1】:

我通过创建一个新的 Python 线程并将第二个事务附加到它来实现了一个解决方案。为了确保它在第一个事务之后启动,我在线程开始第二个事务之前在线程中放置了一个小的延迟。希望没有引入线程的问题。

【讨论】:

    猜你喜欢
    • 2012-08-03
    • 1970-01-01
    • 2015-09-25
    • 2012-06-19
    • 1970-01-01
    • 2014-09-06
    • 2015-10-31
    • 1970-01-01
    • 2013-10-11
    相关资源
    最近更新 更多