首页 > 解决方案 > 连接中断:ConnectionResetError(104, 'Connection reset by peer') 作为来自 python 服务器的响应,同时通过 Ajax 调用请求

问题描述

面临一个问题:(“连接中断:ConnectionResetError(104,'对等连接重置')”,ConnectionResetError(104,'对等连接重置'))

环境:PCF(OS:Linux, Instance with 3GB RAM and 8 Core of CPU)

用例:需要将较大的文本文件转换为 Dataframe(20k,204) 并需要做一些操作,最后保存为 excel。

我在 200 个文件上尝试了大约 20,000 行文本,试图将所有 200 个文本文件转换为 excel。

代码执行的预计到达时间是:5 分钟。

在 Flask Server 上运行的 Python 代码。

通过 $ajax() 异步调用此脚本。

浏览器:铬

我已经完成了多处理使用,

  1. 池.map():
pool = Pool(processes=os.cpu_count()//2,maxtasksperchild=1)                 
s=pool.map(MainFunction, MainListFiles)
pool.close()
pool.join()
del pool
pool=None
e=str(time.time()-st)
s.append(e)

使用 jquery Ajax 调用 python 脚本:

$.ajax({
        type: 'POST',
        url: PythonUrl,
        data: $.param({path:'PythonCode',pythonfile:filename,data:rand}),
        beforeSend: function()
        {
          $('#loader').css('display','block');
        },
        success: function(data)
        {
          console.log(data)
          $('#loader').css('display','none');
          modal.style.display = "block";
          document.getElementById('p1').innerHTML = data;
        },
        error: function(x, t, m) {
          if(t==="timeout") {
              alert("got timeout");
          } else {
              alert(t);
          }
      }
    });

我研究了ajax在promise解决之前不会关闭连接,对吗?

那么什么可能导致这个错误呢?对等方重置连接,究竟是什么意思?

我看到一些线程有同样的错误,但他们错过了 pool.join() 所以 mp 在一些工作人员正在处理时试图关闭池。但我已经正确地加入了池。

注意:但有一件事我在此异常之后再次运行相同的脚本,它成功运行并给出了正确的响应。

所以错误是由于:

  1. ajax是否关闭连接,因为它很长时间没有得到python的响应。
  2. 浏览器是意外关闭连接还是出于某种原因?
  3. 这是尝试关闭池时的任何多处理异常吗(因为我恰好在最后一刻收到此错误,其中最后 3 个文件正在处理 200 个文件中)
  4. 问题通常是由于客户端或服务器端出现问题而发生的。它说连接重置。所以服务器重置连接:FLASK?JavaScript 吗?多处理?浏览器?

这真的让我害怕!因此,如果不理解这一点,就无法将此代码提交到生产环境中。因此,如果有人可以就此向我提出建议,那就太好了。

标签: pythonajaxflaskmultiprocessing

解决方案


推荐阅读