当前位置: 首页 > 面试题库 >

如何防止errno 32管道破裂?

邓星光
2023-03-14
问题内容

目前,我正在使用内置于python的应用程序。当我在个人计算机上运行它时,它不会出现问题。

但是,当我将其移至生产服务器时。它不断向我显示以下错误:

我进行了一些研究,得出的原因是,当服务器仍在忙于发送数据时,最终用户浏览器会停止连接。

我想知道为什么会发生这种情况,以及根本原因是什么导致它无法在生产服务器上正常运行,而我的计算机却可以正常运行。任何建议表示赞赏

    Exception happened during processing of request from ('127.0.0.1', 34226)
Traceback (most recent call last):
  File "/usr/lib/python2.7/SocketServer.py", line 284, in
_handle_request_noblock
    self.process_request(request, client_address)
  File "/usr/lib/python2.7/SocketServer.py", line 310, in process_request
    self.finish_request(request, client_address)
  File "/usr/lib/python2.7/SocketServer.py", line 323, in finish_request
    self.RequestHandlerClass(request, client_address, self)
  File "/usr/lib/python2.7/SocketServer.py", line 641, in __init__
    self.finish()
  File "/usr/lib/python2.7/SocketServer.py", line 694, in finish
    self.wfile.flush()
  File "/usr/lib/python2.7/socket.py", line 303, in flush
    self._sock.sendall(view[write_offset:write_offset+buffer_size])
error: [Errno 32] Broken pipe

问题答案:

您的服务器进程已收到SIGPIPE对套接字的写入。当您写入另一端(客户端)完全关闭的套接字时,通常会发生这种情况。当客户端程序不等到接收到来自服务器的所有数据而只是关闭套接字(使用close函数)时,可能会发生这种情况。

在C程序中,您通常会尝试设置忽略SIGPIPE信号或为其设置虚拟信号处理程序。在这种情况下,写入关闭的套接字时将返回一个简单的错误。在您的情况下,Python似乎抛出了一个异常,该异常可以作为客户端的过早断开连接进行处理。



 类似资料:
  • 我有一个非常奇怪的问题,我希望你的眼睛能帮助解决它。 我定义了一个函数,它通过BASH连接到Oracle SQL数据库。连接后,我使用一个herdeoc传入一个简单的select语句,该语句查找最大订阅id并递增它,具体取决于函数被调用的次数。代码如下: 在命令行调用函数时,上述代码非常有效: 但是,当函数通过管道传输到AWK语句时,函数不再抖动,这毫无意义!请参阅下面的输出: 我不明白。哈哈,我

  • 我使用ApacheCommons http客户端调用url,使用post方法发布参数,它很少抛出以下错误。 有人能建议是什么导致了这个异常以及如何调试它吗?

  • 我应该写一个递归(!)方法来计算整数数组中给定整数的出现次数,如果偶数,则返回true,如果为奇数,则返回false。这是我到目前为止的代码: 它适用于 但它给出了 for 我不确定如何防止这种无休止的递归循环,因为我是编程新手,这是我第一次使用递归。提前致谢。

  • 问题内容: 从TABLE布局切换到DIV布局以来,一个普遍的问题仍然存在: 问题 :您用动态文本填充DIV,并且不可避免地会有一个超长单词延伸到div列的边缘,使您的网站看起来不专业。 复古 :这 从未 发生过表布局。一个表格单元格总是可以很好地扩展到最长单词的宽度。 严重性 :我什至在大多数主要站点上都 遇到了 这个问题,尤其是在德国站点上,这些站点甚至连“限速”之类的通用词都非常长(“ Ges

  • 我是否缺少一些配置选项来防止它崩溃?通常情况下,所有异常都会被捕获并返回一个500错误,而服务器仍然处于活动状态。

  • 我试图实现一些东西作为“竞赛条件”。这个竞赛条件必须遵循这些情况: 同时触发两个HTTP调用。 返回第一个成功完成的调用的响应。 处理最后一个呼叫。(这里最重要的是我不能丢弃最后一个呼叫,我确实需要处理它的结果:无论它的状态、成功或失败)。 此代码示例是我实现的解决方案中最接近的一个: 在这个例子中,我使用了Flux.first方法,它帮助我返回了第一个调用,但是它丢弃(取消)了第二个调用,这是一