Python PyMySQL连接超时-代码结构

Python PyMySQL连接超时-代码结构,python,database,performance,optimization,pymysql,Python,Database,Performance,Optimization,Pymysql,我已经编写了一个脚本,它从sqlite数据库获取数据并上传到MySQL数据库。代码的结构如下所示 def insert_to_mysql(_row): # get mysql connection by Pymysql connection = pymysql.connect(..., connect_timeout=31536000) # insert data connection.close def get_data_from_sqlite(_db):

我已经编写了一个脚本,它从sqlite数据库获取数据并上传到MySQL数据库。代码的结构如下所示

def insert_to_mysql(_row):
    # get mysql connection by Pymysql
    connection = pymysql.connect(..., connect_timeout=31536000)
    # insert data
    connection.close

def get_data_from_sqlite(_db):
   for i in sqlite_generator:
       insert_to_mysql(i)
代码运行良好。但是连接get的超时没有特定的模式,下面的跟踪非常频繁,尽管connection对象中的connect\u超时,并且我每行使用一个对象。我的逻辑是为一行创建一个对象,这样就不会出现超时问题

有人能帮我理解这里出了什么问题吗

Traceback (most recent call last):
  File "/home/santhosh/.local/lib/python3.5/site-packages/pymysql/connections.py", line 691, in _read_bytes
    data = self._rfile.read(num_bytes)
  File "/usr/lib/python3.5/socket.py", line 575, in readinto
    return self._sock.recv_into(b)
TimeoutError: [Errno 110] Connection timed out

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "up_data_upload.py", line 85, in <module>
    import_data(record)
  File "up_data_upload.py", line 43, in import_data
    db='up_scrape_data')
  File "up_data_upload.py", line 31, in get_mysql_connection
    connect_timeout=31536000)
  File "/home/santhosh/.local/lib/python3.5/site-packages/pymysql/__init__.py", line 94, in Connect
    return Connection(*args, **kwargs)
  File "/home/santhosh/.local/lib/python3.5/site-packages/pymysql/connections.py", line 325, in __init__
    self.connect()
  File "/home/santhosh/.local/lib/python3.5/site-packages/pymysql/connections.py", line 598, in connect
    self._get_server_information()
  File "/home/santhosh/.local/lib/python3.5/site-packages/pymysql/connections.py", line 975, in _get_server_information
    packet = self._read_packet()
  File "/home/santhosh/.local/lib/python3.5/site-packages/pymysql/connections.py", line 657, in _read_packet
    packet_header = self._read_bytes(4)
  File "/home/santhosh/.local/lib/python3.5/site-packages/pymysql/connections.py", line 699, in _read_bytes
    "Lost connection to MySQL server during query (%s)" % (e,))
pymysql.err.OperationalError: (2013, 'Lost connection to MySQL server during query ([Errno 110] Connection timed out)')
回溯(最近一次呼叫最后一次):
文件“/home/santhosh/.local/lib/python3.5/site packages/pymysql/connections.py”,第691行,以字节为单位
data=self.\u rfile.read(num\u字节)
readinto中的文件“/usr/lib/python3.5/socket.py”,第575行
返回自我。将袜子重新放入(b)
TimeoutError:[Errno 110]连接超时
在处理上述异常期间,发生了另一个异常:
回溯(最近一次呼叫最后一次):
文件“up_data_upload.py”,第85行,在
导入数据(记录)
导入数据中第43行的文件“up_data_upload.py”
db='up\u scrape\u data')
get\u mysql\u连接中的第31行文件“up\u data\u upload.py”
连接(超时=31536000)
文件“/home/santhosh/.local/lib/python3.5/site packages/pymysql/_init__.py”,第94行,在Connect中
返回连接(*args,**kwargs)
文件“/home/santhosh/.local/lib/python3.5/site packages/pymysql/connections.py”,第325行,在__
self.connect()
connect中的文件“/home/santhosh/.local/lib/python3.5/site packages/pymysql/connections.py”,第598行
self.\u获取\u服务器\u信息()
文件“/home/santhosh/.local/lib/python3.5/site packages/pymysql/connections.py”,第975行,在获取服务器信息中
数据包=自身。\u读取\u数据包()
文件“/home/santhosh/.local/lib/python3.5/site packages/pymysql/connections.py”,第657行,在读包中
数据包头=self.\u读取字节(4)
文件“/home/santhosh/.local/lib/python3.5/site packages/pymysql/connections.py”,第699行,以字节为单位
“查询(%s)”期间与MySQL服务器的连接中断%(e,)
pymysql.err.OperationalError:(2013,“查询期间与MySQL服务器的连接中断([Errno 110]连接超时)”

提前感谢。

处理环路外部的连接/断开连接。它正在工作。您能否解释一下,如果在循环中给出,为什么会产生问题?服务器正在被连接/断开的连接弄得不知所措。这是一个相对繁重的操作(尽管MySQL在这方面相当快)。我还怀疑断开连接有点异步,因此下一个连接在上一个断开连接的所有资源重新语言化之前到达。这是有道理的。谢谢。处理环路外的连接/断开连接。它正在工作。您能否解释一下,如果在循环中给出,为什么会产生问题?服务器正在被连接/断开的连接弄得不知所措。这是一个相对繁重的操作(尽管MySQL在这方面相当快)。我还怀疑断开连接有点异步,因此下一个连接在上一个断开连接的所有资源重新语言化之前到达。这是有道理的。谢谢