【问题标题】:CherryPy: Exception handling help neededCherryPy:需要异常处理帮助
【发布时间】:2013-11-16 01:09:26
【问题描述】:

我有一个 html.app,它从 CherryPy 后端异步请求其 JSON 数据模型。 JSON 数据的大小有点大 1.74 MB。加载和渲染数据大约需要 1 秒。该应用程序在独立时运行良好。但是,当我通过 mod_wsgi 将它附加到 Apache Web 服务器时,我立即开始注意到问题。

当 html 页面在数据连接关闭之前被刷新时 mod_wsgi 会触发它的臭名昭著

  mod_wsgi (pid=917): Exception occurred processing WSGI script '/myapp_path/WebApp.py'
  IOError: failed to write data, referer: https://domain/etc/padmin/
  ENGINE Started monitor thread 'Session cleanup'.
  ENGINE Started monitor thread 'Session cleanup'.

我了解 Apache 在 WSGI 有机会将整个数据泵送到客户端之前关闭数据连接。这没什么大不了的,但它引发了某种内部异常,我无法真正捕获或不知道如何捕获。 CherryPy 的默认行为是在发生未处理的异常时重置会话。我需要更改 CherryPy 的行为,以便当客户端选择不等待很长时间等待数据完成时它不会重置活动会话。我更愿意捕获和抑制 mod_wsgi 异常解决方案,但如果不可能,如果发生未经处理的异常,我会选择阻止“会话清理”操作。 任何帮助将不胜感激。

更新: 我将我的问题追溯到配置不正确的会话存储类型。它应该是 file 但由于非法值,它变成了默认的 ram 类型。问题已解决。

【问题讨论】:

  • 关闭连接的不是 Apache,而是 HTTP 客户端。
  • @GrahamDumpleton 我正在考虑修改您的代码以忽略此事件。我只是不明白 ajax 或流媒体应用程序如何与 CherryPy 一起使用。
  • 在修改它时,您将违反 WSGI 规范。除非您使用 WSGI write() 回调,这不太可能,否则您永远不会在您的 WSGI 应用程序中看到此异常,所以我认为您一定是误解了某些东西。
  • CherryPy 知道它发生的唯一方法是,它是否在块中流式传输数据,并在所有块被产生之前看到返回的可迭代对象上的 close()。如果它达到这样的长度,我会感到惊讶。
  • 我建议您用“我将我的问题追溯到配置不正确的会话存储类型。它应该是文件但由于非法值,它变成了默认的 ram 类型。问题已解决。”然后接受这个问题。

标签: python apache mod-wsgi cherrypy


【解决方案1】:

我编写python程序,所以我不确定html如何处理异常,但应该有一个“try and catch”系统来处理它。这意味着您可以尝试执行一些代码,如果失败,您可以执行其他操作。您还可以指定哪个错误将触发第二段代码。这是一个python示例:

try:
    #do something here
except IOError, e:
    #in the event of an IO error, do this, e is a variable you can choose to pass in that gives details about the error
except SystemExit:
    #another python exception
finally:
    #it is possible that html also supports a finally. Basically, no matter if it executes the try or one of the exception handlers, it will finish by doing this no matter what.

【讨论】:

  • 感谢您的反馈。请查看我的问题的更新部分。
  • 终于支持的是Python版本的功能,与html无关。
  • 然而html肯定有异常处理。
猜你喜欢
  • 1970-01-01
  • 2023-03-28
  • 1970-01-01
  • 2013-05-28
  • 2022-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多