【问题标题】:Flask broken pipe when redirecting after AJAX callAJAX调用后重定向时烧瓶损坏的管道
【发布时间】:2016-11-17 21:32:38
【问题描述】:

我有一个 JQuery AJAX 调用:

$.getJSON($SCRIPT_ROOT + '/_click_btn?btnId='+$(this).attr("id"),
          $('form').serialize(),
          function(data) {
             // return to send_messages page
             window.location = 'send_messages';
});

它没有做任何花哨的事情。它只是将一些表单数据保存到数据库中(使用 SQLAlchemy)。我在 window.location 语句上放置了一个断点,如果我将重定向延迟 1-2 秒,则不会发生损坏的管道。处理此问题的最佳做法是什么?

另一项需要注意的是,在 AJAX 调用完成后,数据库会话仍保持打开状态。

错误信息如下。

Exception in thread Thread-1:
Traceback (most recent call last):
File "/usr/lib64/python2.7/threading.py", line 813, in __bootstrap_inner self.run()
File "/usr/lib64/python2.7/threading.py", line 766, in run self.__target(*self.__args, **self.__kwargs)
File "/gui/venv/lib/python2.7/site-packages/werkzeug/serving.py", line 656, in inner srv.serve_forever()
File "/gui/venv/lib/python2.7/site-packages/werkzeug/serving.py", line 496, in serve_forever HTTPServer.serve_forever(self)
File "/usr/lib64/python2.7/SocketServer.py", line 238, in serve_forever
self._handle_request_noblock()
File "/usr/lib64/python2.7/SocketServer.py", line 297, in _handle_request_noblock
self.handle_error(request, client_address)
File "/usr/lib64/python2.7/SocketServer.py", line 295, in _handle_request_noblock
self.process_request(request, client_address)
File "/usr/lib64/python2.7/SocketServer.py", line 321, in process_request
self.finish_request(request, client_address)
File "/usr/lib64/python2.7/SocketServer.py", line 334, in finish_request
self.RequestHandlerClass(request, client_address, self)
File "/usr/lib64/python2.7/SocketServer.py", line 655, in __init__
self.handle()
File "/gui/venv/lib/python2.7/site-packages/werkzeug/serving.py", line 216, in handle rv = BaseHTTPRequestHandler.handle(self)
File "/usr/lib64/python2.7/BaseHTTPServer.py", line 340, in handle
self.handle_one_request()
File "/gui/venv/lib/python2.7/site-packages/werkzeug/serving.py", line 251, in handle_one_request
return self.run_wsgi()
File "/gui/venv/lib/python2.7/site-packages/werkzeug/serving.py", line 193, in run_wsgi
execute(self.server.app)
File "/gui/venv/lib/python2.7/site-packages/werkzeug/serving.py", line 184, in execute
write(data)
File "/gui/venv/lib/python2.7/site-packages/werkzeug/serving.py", line 152, in write
self.send_header(key, value)
 File "/usr/lib64/python2.7/BaseHTTPServer.py", line 401, in send_header
self.wfile.write("%s: %s\r\n" % (keyword, value))
IOError: [Errno 32] Broken pipe

【问题讨论】:

  • 能否粘贴剩余的错误日志?
  • 完成!谢谢!!!

标签: ajax flask flask-sqlalchemy


【解决方案1】:

作为临时解决方案,我在重定向之前添加了 500 毫秒的延迟。似乎必须有更好的方法,但目前可行。

【讨论】:

    【解决方案2】:

    我在 Ubuntu VM 上的 Kubernetes 上的 Ubuntu Docker 容器中也看到了这个错误:

    Error on request:
    Traceback (most recent call last):
      File "/usr/local/lib/python2.7/dist-packages/werkzeug/serving.py", line 270, in run_wsgi
        execute(self.server.app)
      File "/usr/local/lib/python2.7/dist-packages/werkzeug/serving.py", line 261, in execute
        write(data)
      File "/usr/local/lib/python2.7/dist-packages/werkzeug/serving.py", line 227, in write
        self.send_header(key, value)
      File "/usr/lib/python2.7/BaseHTTPServer.py", line 412, in send_header
        self.wfile.write("%s: %s\r\n" % (keyword, value))
    IOError: [Errno 32] Broken pipe
    

    我创建了一个全新的 Ubuntu xenial VM,并在 Kubernetes 上的 Ubuntu Docker 容器中运行了相同的代码,并且看到此错误并且 Python Flask 正常工作。我认为这是我的主机(Ubuntu VM)的问题。

    【讨论】:

      猜你喜欢
      • 2012-09-17
      • 1970-01-01
      • 2019-10-30
      • 2018-04-17
      • 1970-01-01
      • 1970-01-01
      • 2014-09-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多