当客户端过早断开连接时,如何对烧瓶上的破损管道错误进行例外处理?

2023-11-22

我使用 Flask 进行开发,而不是生产,并且我有一个 ajax 请求的视图,如下所示:

@application.route('/xyz/<var>/', methods=['GET'])
def getAjax(var):
    ...
    return render_template(...)

我也在用threaded=true为发展。 每当我调用该 ajax 请求,然后关闭请求它的选项卡时,我都会收到错误:

Traceback (most recent call last):   File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/SocketServer.py", line 593, in process_request_thread
self.finish_request(request, client_address)   File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/SocketServer.py", line 334, in finish_request
self.RequestHandlerClass(request, client_address, self)   File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/SocketServer.py", line 651, in __init__ 2015-07-07 09:46:09,430 127.0.0.1 - - [07/Jul/2015 09:46:09] "GET /xyz/List/ HTTP/1.1" 200 -
self.finish()   File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/SocketServer.py", line 710, in finish
self.wfile.close()   File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/socket.py", line 279, in close
self.flush()   File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/socket.py", line 303, in flush
self._sock.sendall(view[write_offset:write_offset+buffer_size]) error: [Errno 32] Broken pipe

我可不可以有一个try: except阻止捕获此异常? 我尝试把所有的getAjax函数的内容在:

try:
    ...
except socket.error, e:
    logging.warn("socket error " + e)

但它不起作用,我应该在哪里做呢?或者如何?

编辑:添加ajax调用

$.ajax({
    type: 'GET',
    url: '/xyz/' + var + '/',
    data: {
            ...
        },
    timeout: 2000,
    success: function(data) {
        ...
        },
    error: function(XMLHttpRequest, textStatus, errorThrown) {
        ...
        }
    });

您遇到的问题是,通过使用 Flask,您无法控制完整的服务器堆栈,因此您无法捕获应用程序代码之外出现的错误。 socket.error 实际上是在 Flask 的内置开发服务器中传播自身(这可能只是 SocketServer 的包装,我不知道细节),并且因为它只是一个开发服务器,不适合生产使用,所以它不处理客户突然死亡的情况。

一般来说,这应该不重要。如果您实际上要使用 Gunicorn 或其他东西来部署代码,那么 WSGI 容器将处理损坏的管道,而无需您执行任何操作。您可以通过在本地这样的容器中运行代码来测试这一点 - 尝试在计算机上安装 Gunicorn 并查看当您的应用程序代码在其包装器中运行时会发生什么。

如果您仍然遇到问题,那么事情可能会变得复杂,因为问题可能出现在许多不同的地方。Gevent 刚刚处理这个特定的错误,因此如果您使用的是鲜为人知的 WSGI 容器,那么它可能也无法处理此错误。或者它可能是某事they're使用它无法处理这个问题。

一般来说,如果您以标准方式使用 Web 框架,则不必自己处理低级服务器错误。这就是您一开始就使用 Web 框架的原因。如果您尝试推出自己的视频流或其他内容,那完全是另一种情况,但这里的情况似乎并非如此。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当客户端过早断开连接时,如何对烧瓶上的破损管道错误进行例外处理? 的相关文章

随机推荐

  • 在 Hive 中连接日期范围内的表

    我需要在employee id上 将tableA连接到tableB 并且表A中的cal date需要在表B的开始日期和结束日期之间 我运行了下面的查询并收到了下面的错误消息 请您帮我纠正和查询 谢谢你的帮助 JOIN date start
  • HTML/CSS 中的进度条

    dd position relative IE is dumb display block float left width 500px height 16px margin 0 0 2px background url white3 gi
  • 使用 Scrapy 使用“加载更多”按钮抓取无限滚动页面

    如何废弃一个无限滚动的网页 其中响应是 html text 而不是 json 我的第一次尝试是使用 Rule 和 LinkExtractor 它为我提供了大约 80 的职位 url class JobsetSpider CrawlSpide
  • 角度路径参数中的正斜杠

    如何设置我的路线 以便我的参数可以采用正斜杠 例如 myapp com file rootfolder subfolder myfile 这不起作用 const SECTION ROUTES Routes path file path co
  • 使用 Node JS 进行 HLS 流式传输

    我正在尝试使用 node js 流式传输 HLS 内容 但不知怎的 它不起作用 如果有人帮助我 那将会有很大的帮助 问题 尝试从 node js 提供 HLS 内容 不是直播 而是一组 ts 文件和 m3u8 播放列表 或者换句话说 VOD
  • 为什么 Createfile() 没有二进制标志

    Windows 编程的一大乐趣就是记住在所有文件打开调用中放入 wb 或 rb 或 ios binary 这样 Windows 就不会愉快地转换所有 0x13 我只需转换一堆很好的标准代码来使用 Createfile 来获取某个标志 我突然
  • Scala 泛型类的条件方法,具有类型参数的限制

    我相信泛型类可能仅在假设其类型参数符合一些附加限制的情况下才使其方法之一可用 例如 现场即兴编写的语法 trait Col T extends Traversable T def sum T lt Int T 0 this 我想我可以使用隐
  • 如何添加 SOAP 安全标头

    我读了很多文章和答案 但我无法解决 我在我的项目中使用 NET Framework 4 0 因此 我首先将 WebService 添加为服务引用 并在 app config 上获取绑定 我将列出我的尝试 尝试 1 我像这样实例化了服务并添加
  • 无法使用 Visual Studio 2015 命令行工具编译和链接简单的 C++ 程序

    使用 Visual Studio 2015 我无法再使用命令行工具编译和链接简单的 C 程序 考虑 main cpp include
  • Geochart:使用 ISO 3266-2 区域代码但显示真实姓名

    我正在使用Google 可视化 Geochart API创建一个国家地区的地图 我提供ISO 3266 2 国家细分代码并得到正确的结果 然而 在图表中将 ISO 3266 2 代码显示为标签是一种糟糕的用户体验 所以我想提供一个自定义标签
  • 使用代码启动 Photoshop 操作

    是否可以使用代码启动 Photoshop 操作 我的意思是通过批处理文件在 Photoshop 中启动该操作 或类似的东西 较新版本的 Photoshop CS5 和 CS6 是我使用过的唯一版本 支持一项称为Droplets它允许您创建可
  • 是否可以将 MyBatis 和 QueryDSL/jOOQ 结合起来?

    MyBatis 提供开箱即用的映射 本地缓存和日志记录 QueryDSL jOOQ 提供 SQL 语句的编译时检查和 IDE 自动完成功能 是否可以将它们结合起来 换句话说 我想使用 QueryDSL 或 jOOQ 创建一个查询 然后使用
  • java:字符串数组列表并删除

    在这样的测试中 Test public void test List
  • 强制 Flex 更新屏幕?

    这可能是一个初学者的问题 但我一生都无法弄清楚 我正在使用 Flex 为一个大型项目开发 GUI 特别是底部的状态栏 在我的 StatusBar 类中是一个 ProgressBar 其他正在工作的类可以告诉它在进展时更新 更改栏完成和标签
  • 登录表单是否需要令牌来抵御 CSRF 攻击?

    据我目前所知 令牌的目的是防止攻击者伪造表单提交 例如 如果网站有一个表单将添加的商品输入到您的购物车 那么攻击者可能会向您的购物车发送您不想要的商品 这是有道理的 因为购物车表单可能有多个有效输入 攻击者所要做的就是知道网站正在销售的商品
  • SignalR 中心中每个 web-api 请求的简单注入器依赖项

    根据this发布后 应该可以将每个网络请求的依赖项注入 SignalR 集线器 尽管有一些限制 例如 OnDisconnected 方法的问题 就我而言 它是 ASP Web API 不是 MVC 但由于某种原因它不起作用 以下是相关部分
  • swift 如何删除可选字符串字符

    如何删除可选字符 let color colorChoiceSegmentedControl titleForSegmentAtIndex colorChoiceSegmentedControl selectedSegmentIndex p
  • 如何让 Cucumber/Capybara/Mechanize 与外部非轨道站点一起工作

    我正在尝试在 Google 应用程序脚本上执行 BDD 我知道原则上我应该能够使用 Cucumber Capybara 和 Mechanize 的某种组合在非 Rails 外部站点上执行 BDD 在本例中 我尝试测试我创建的 Google
  • C++中获取返回值的类型

    假设我们有一个函数f它返回一个未知类型的值 我们称之为T 并采用类型的值T作为一个论点 可能还有一些其他论点 我如何获得返回类型f在 C 14 中 如果我们知道参数类型 就有一种方法可以做到这一点 通过std result of 如果我们知
  • 当客户端过早断开连接时,如何对烧瓶上的破损管道错误进行例外处理?

    我使用 Flask 进行开发 而不是生产 并且我有一个 ajax 请求的视图 如下所示 application route xyz