Browse Source

Use a dict instead of getattr for parsing events.

Probably not a significant difference but might as well use it here.
The basic idea is to cache the getattr calls instead of repeatedly
doing it (since they're around 105ns on my machine). The dictionary
lookup is about 41ns on my machine.

The next step in speeding up library code some more should be in
the parser bodies themselves but that's a problem to tackle another
day.
pull/2194/head
Rapptz 6 years ago
parent
commit
00a0856cc4
  1. 7
      discord/gateway.py
  2. 1
      discord/shard.py
  3. 6
      discord/state.py

7
discord/gateway.py

@ -227,6 +227,7 @@ class DiscordWebSocket(websockets.client.WebSocketClientProtocol):
# dynamically add attributes needed
ws.token = client.http.token
ws._connection = client._connection
ws._discord_parsers = client._connection.parsers
ws._dispatch = client.dispatch
ws.gateway = gateway
ws.shard_id = shard_id
@ -414,11 +415,9 @@ class DiscordWebSocket(websockets.client.WebSocketClientProtocol):
log.info('Shard ID %s has successfully RESUMED session %s under trace %s.',
self.shard_id, self.session_id, ', '.join(trace))
parser = 'parse_' + event.lower()
try:
func = getattr(self._connection, parser)
except AttributeError:
func = self._discord_parsers[event]
except KeyError:
log.warning('Unknown event %s.', event)
else:
func(data)

1
discord/shard.py

@ -221,6 +221,7 @@ class AutoShardedClient(Client):
ws.token = self.http.token
ws._connection = self._connection
ws._discord_parsers = self._connection.parsers
ws._dispatch = self.dispatch
ws.gateway = gateway
ws.shard_id = shard_id

6
discord/state.py

@ -33,6 +33,7 @@ import itertools
import logging
import math
import weakref
import inspect
from .guild import Guild
from .activity import _ActivityTag
@ -88,6 +89,11 @@ class ConnectionState:
self._activity = activity
self._status = status
self.parsers = parsers = {}
for attr, func in inspect.getmembers(self):
if attr.startswith('parse_'):
parsers[attr[6:].upper()] = func
self.clear()
def clear(self):

Loading…
Cancel
Save