mirror of
https://github.com/Rapptz/discord.py.git
synced 2025-04-19 15:36:02 +00:00
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.
This commit is contained in:
parent
0622e18cb9
commit
00a0856cc4
@ -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)
|
||||
|
@ -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
|
||||
|
@ -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…
x
Reference in New Issue
Block a user