连接中断:通过 Ajax 调用请求时,ConnectionResetError(104, '连接由对等方重置') 作为来自 python 服务器的响应

问题描述 投票:0回答:1

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

环境:PCF(操作系统:Linux,实例具有3GB RAM和8核CPU)

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

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

代码执行预计时间为:5 分钟。

在 Flask 服务器上运行的 Python 代码。

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

浏览器:Chrome

我已经完成了多重处理,

  1. pool.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 ?多重处理?浏览器?

这真的让我害怕!因此,如果不理解这一点,就无法将此代码投入生产。因此,如果有人能就此向我提出建议,那就太好了。

python ajax flask multiprocessing
1个回答
0
投票

这更像是一种解决方法,而不是修复......

使用 conda env,我遇到了 conda cryptography=41.0.2.

的问题

我对 conda 没有这个问题 cryptography=3.4.7

我的环境是我的(基础)

© www.soinside.com 2019 - 2024. All rights reserved.