lask 使用pymysql 操作mysql 老断开链接报错 10054

2021-03-04 13:45发布

使用flask写的项目 不定时的就回有这样的报错。然后mysql 服务就停止了,需要手动开启mysql服务Traceback (most recent call last):   File D:\ne...

使用flask写的项目 不定时的就回有这样的报错。然后mysql 服务就停止了,需要手动开启mysql服务

Traceback (most recent call last):
  File "D:\newflaskdome\venv\lib\site-packages\pymysql\connections.py", line 732, in _read_bytes
    data = self._rfile.read(num_bytes)
  File "C:\Users\huoda\AppData\Local\Programs\Python\Python39\lib\socket.py", line 704, in readinto
    return self._sock.recv_into(b)
ConnectionResetError: [WinError 10054] 远程主机强迫关闭了一个现有的连接。
 
During handling of the above exception, another exception occurred:
2条回答
给你三个亿
2楼 · 2021-03-05 09:29

ConnectionResetError: [WinError 10054] 远程主机强迫关闭了一个现有的连接。

错误结果:


Traceback (most recent call last):

  File "G:/python图片下载/dianshiju_db.py", line 25, in

    print(imgdon("http://tupian.tupianzy.com/pic/upload/vod/2018-11-12/201811121542011934.jpg"))

  File "G:/python图片下载/dianshiju_db.py", line 22, in imgdon

    urllib.request.urlretrieve(img_url, filename=filename)

  File "E:\python\lib\urllib\request.py", line 248, in urlretrieve

    with contextlib.closing(urlopen(url, data)) as fp:

  File "E:\python\lib\urllib\request.py", line 223, in urlopen

    return opener.open(url, data, timeout)

  File "E:\python\lib\urllib\request.py", line 526, in open

    response = self._open(req, data)

  File "E:\python\lib\urllib\request.py", line 544, in _open

    '_open', req)

  File "E:\python\lib\urllib\request.py", line 504, in _call_chain

    result = func(*args)

  File "E:\python\lib\urllib\request.py", line 1346, in http_open

    return self.do_open(http.client.HTTPConnection, req)

  File "E:\python\lib\urllib\request.py", line 1321, in do_open

    r = h.getresponse()

  File "E:\python\lib\http\client.py", line 1331, in getresponse

    response.begin()

  File "E:\python\lib\http\client.py", line 297, in begin

    version, status, reason = self._read_status()

  File "E:\python\lib\http\client.py", line 258, in _read_status

    line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1")

  File "E:\python\lib\socket.py", line 586, in readinto

    return self._sock.recv_into(b)

ConnectionResetError: [WinError 10054] 远程主机强迫关闭了一个现有的连接。


分析:出现这种原因代表远程过于频繁,所以远程怀疑是恶意攻击,我是出现在远程图片下载时的错误,我在网上找到的方法如下:

【Python爬虫错误】ConnectionResetError: [WinError 10054] 远程主机强迫关闭了一个现有的连接

我个人的解决是使用函数回调解决的

意思就是当程序因为远程主机强制关闭而报错时,使用try- except在报错时从新调用该方法使其重新抓取,直至抓取成功,一般一两次就会成功,效率还算可以

源代码:


import os

import random

import urllib.request



def imgdon(url):

    img_url = url

    file_path = 'D:/book/tvimg/'

    file_name = "tvimg" + str(int(random.uniform(20, 10) * 10 ** 14))

    # 是否有这个路径

    if not os.path.exists(file_path):

        # 创建路径

        os.makedirs(file_path)

        # 获得图片后缀

    file_suffix = os.path.splitext(img_url)[1]

    # print(file_suffix)

    # 拼接图片名(包含路径)

    # filename = '{}{}{}{}'.format(file_path, os.sep, file_name, file_suffix)

    filename = file_path + file_name + file_suffix

    print(filename)

    # 下载图片,并保存到文件夹中

    urllib.request.urlretrieve(img_url, filename=filename)

    return "http://www.klkj1999.top:8081/tvimg/"+file_name + file_suffix


print(imgdon("http://tupian.tupianzy.com/pic/upload/vod/2018-11-12/201811121542011934.jpg"))


解决后的结果:


G:\python图片下载\venv\Scripts\python.exe G:/python图片下载/dianshiju_db.py

D:/book/tvimg/tvimg1396168651250299.jpg

D:/book/tvimg/tvimg1502497444740666.jpg

D:/book/tvimg/tvimg1103678614205344.jpg

http://www.klkj1999.top:8081/tvimg/tvimg1396168651250299.jpg




Python新手营
3楼 · 2021-04-28 11:41

发生这样错误的常规可能性有两种:

1、批量的请求存入数据,并且使用了for循环每次创建和关闭连接,没有进行任何限制。

2、端口出现占用

但是第一种可能性比较大,建议:

1、通常这样的错误是固定的出现的,断点查看出错的代码,分析数据库操作的步骤

2、重启数据库,关闭不必要的应用

相关问题推荐

  • 回答 3

    换行。比如,print hello\nworld效果就是helloworld\n就是一个换行符。\是转义的意思,'\n'是换行,'\t'是tab,'\\'是,\ 是在编写程序中句子太长百,人为换行后加上\但print出来是一整行。...

  • 回答 42

    十种常见排序算法一般分为以下几种:(1)非线性时间比较类排序:a. 交换类排序(快速排序、冒泡排序)b. 插入类排序(简单插入排序、希尔排序)c. 选择类排序(简单选择排序、堆排序)d. 归并排序(二路归并排序、多路归并排序)(2)线性时间非比较类排序:...

  • 回答 70
    已采纳

    前景很好,中国正在产业升级,工业机器人和人工智能方面都会是强烈的热点,而且正好是在3~5年以后的时间。难度,肯定高,要求你有创新的思维能力,高数中的微积分、数列等等必须得非常好,软件编程(基础的应用最广泛的语言:C/C++)必须得很好,微电子(数字电...

  • 回答 28

    迭代器与生成器的区别:(1)生成器:生成器本质上就是一个函数,它记住了上一次返回时在函数体中的位置。对生成器函数的第二次(或第n次)调用,跳转到函数上一次挂起的位置。而且记录了程序执行的上下文。生成器不仅记住了它的数据状态,生成器还记住了程序...

  • 回答 9

    python中title( )属于python中字符串函数,返回’标题化‘的字符串,就是单词的开头为大写,其余为小写

  • 回答 6

    第一种解释:代码中的cnt是count的简称,一种电脑计算机内部的数学函数的名字,在Excel办公软件中计算参数列表中的数字项的个数;在数据库( sq| server或者access )中可以用来统计符合条件的数据条数。函数COUNT在计数时,将把数值型的数字计算进去;但是...

  • 回答 1

    head是方法,所以需要取小括号,即dataset.head()显示的则是前5行。data[:, :-1]和data[:, -1]。另外,如果想通过位置取数据,请使用iloc,即dataset.iloc[:, :-1]和dataset.iloc[:, -1],前者表示的是取所有行,但不包括最后一列的数据,结果是个DataFrame。...

  • Python入门简单吗2021-09-23 13:21
    回答 45

    挺简单的,其实课程内容没有我们想象的那么难、像我之前同学,完全零基础,培训了半年,直接出来就工作了,人家还在北京大公司上班,一个月15k,实力老厉害了

  • 回答 4

    Python针对众多的类型,提供了众多的内建函数来处理(内建是相对于导入import来说的,后面学习到包package时,将会介绍),这些内建函数功用在于其往往可对多种类型对象进行类似的操作,即多种类型对象的共有的操作;如果某种操作只对特殊的某一类对象可行,Pyt...

  • 回答 8

     相当于 ... 这里不是注释

  • 回答 4

    还有FIXME

  • 回答 3

    python的两个库:xlrd和xlutils。 xlrd打开excel,但是打开的excel并不能直接写入数据,需要用xlutils主要是复制一份出来,实现后续的写入功能。

  • 回答 8

    单行注释:Python中的单行注释一般是以#开头的,#右边的文字都会被当做解释说明的内容,不会被当做执行的程序。为了保证代码的可读性,一般会在#后面加一两个空格然后在编写解释内容。示例:#  单行注释print(hello world)注释可以放在代码上面也可以放在代...

  • 回答 2

    主要是按行读取,然后就是写出判断逻辑来勘测行是否为注视行,空行,编码行其他的:import linecachefile=open('3_2.txt','r')linecount=len(file.readlines())linecache.getline('3_2.txt',linecount)这样做的过程中发现一个问题,...

  • 回答 4

    或许是里面有没被注释的代码

  • 回答 26

    自学的话要看个人情况,可以先在B站找一下视频看一下

没有解决我的问题,去提问