Speed up UUID creation for Element._id
#101
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
uuid.uuid4().hex
, used inElement.__init__
to defineself._id
, is considerably slower thanbinascii.hexlify(os.urandom(16)).decode()
.uuid4
usesos.urandom(16)
under the hood when creating a cryptographically-secure UUID, so creating UUIDs forElement
-class objects usinghexlify
leads to a dramatic speed-up (I found about ~60%), which has implications for subclasses ofElement
. No new requirements are needed asbinascii
is already in the Python standard library, so this is essentially a free, pretty big speed bump (especially when considering that someElement
subclasses infolium
themselves create child instances ofElement
when instantiated).self._id = uuid4().hex
:self._id = hexlify(urandom(16)).decode()
: