From 92e785533daaa0ce969de38e22bc0439d21b9178 Mon Sep 17 00:00:00 2001 From: pvpdk Date: Mon, 4 Feb 2019 21:23:14 +0300 Subject: [PATCH 1/4] Optimized packet reading speed 26 times faster on my pc --- pymysql/connections.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/pymysql/connections.py b/pymysql/connections.py index af074e21..0e122ef0 100644 --- a/pymysql/connections.py +++ b/pymysql/connections.py @@ -638,7 +638,7 @@ def _read_packet(self, packet_type=MysqlPacket): :raise OperationalError: If the connection to the MySQL server is lost. :raise InternalError: If the packet sequence number is wrong. """ - buff = b'' + buff = io.BytesIO() while True: packet_header = self._read_bytes(4) #if DEBUG: dump_packet(packet_header) @@ -659,14 +659,15 @@ def _read_packet(self, packet_type=MysqlPacket): recv_data = self._read_bytes(bytes_to_read) if DEBUG: dump_packet(recv_data) - buff += recv_data + buff.write(recv_data) # https://dev.mysql.com/doc/internals/en/sending-more-than-16mbyte.html if bytes_to_read == 0xffffff: continue if bytes_to_read < MAX_PACKET_LEN: break - packet = packet_type(buff, self.encoding) + buff.seek(0) + packet = packet_type(buff.read(), self.encoding) packet.check_error() return packet From be94738efe0ad033fdbfdcc80fdfe7f43c07f364 Mon Sep 17 00:00:00 2001 From: pvpdk Date: Tue, 5 Feb 2019 06:45:14 +0300 Subject: [PATCH 2/4] Fixed remarks --- pymysql/connections.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/pymysql/connections.py b/pymysql/connections.py index 0e122ef0..74381a30 100644 --- a/pymysql/connections.py +++ b/pymysql/connections.py @@ -638,7 +638,7 @@ def _read_packet(self, packet_type=MysqlPacket): :raise OperationalError: If the connection to the MySQL server is lost. :raise InternalError: If the packet sequence number is wrong. """ - buff = io.BytesIO() + buff = bytearray() while True: packet_header = self._read_bytes(4) #if DEBUG: dump_packet(packet_header) @@ -659,15 +659,14 @@ def _read_packet(self, packet_type=MysqlPacket): recv_data = self._read_bytes(bytes_to_read) if DEBUG: dump_packet(recv_data) - buff.write(recv_data) + buff.extend(recv_data) # https://dev.mysql.com/doc/internals/en/sending-more-than-16mbyte.html if bytes_to_read == 0xffffff: continue if bytes_to_read < MAX_PACKET_LEN: break - buff.seek(0) - packet = packet_type(buff.read(), self.encoding) + packet = packet_type(bytes(buff), self.encoding) packet.check_error() return packet From f6ba07f643508b56e895824573b2fbd8f6fa70c9 Mon Sep 17 00:00:00 2001 From: pvpdk Date: Tue, 5 Feb 2019 06:54:11 +0300 Subject: [PATCH 3/4] Fixed remarks --- pymysql/connections.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pymysql/connections.py b/pymysql/connections.py index 74381a30..b4033be5 100644 --- a/pymysql/connections.py +++ b/pymysql/connections.py @@ -659,14 +659,14 @@ def _read_packet(self, packet_type=MysqlPacket): recv_data = self._read_bytes(bytes_to_read) if DEBUG: dump_packet(recv_data) - buff.extend(recv_data) + buff += recv_data # https://dev.mysql.com/doc/internals/en/sending-more-than-16mbyte.html if bytes_to_read == 0xffffff: continue if bytes_to_read < MAX_PACKET_LEN: break - packet = packet_type(bytes(buff), self.encoding) + packet = packet_type(buff, self.encoding) packet.check_error() return packet From 2edc2043dc2910410e311c81f8fd1b0ffe3d9983 Mon Sep 17 00:00:00 2001 From: pvpdk Date: Tue, 5 Feb 2019 07:03:04 +0300 Subject: [PATCH 4/4] Fixed test crash --- pymysql/connections.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pymysql/connections.py b/pymysql/connections.py index b4033be5..7cf3fef6 100644 --- a/pymysql/connections.py +++ b/pymysql/connections.py @@ -666,7 +666,7 @@ def _read_packet(self, packet_type=MysqlPacket): if bytes_to_read < MAX_PACKET_LEN: break - packet = packet_type(buff, self.encoding) + packet = packet_type(bytes(buff), self.encoding) packet.check_error() return packet