<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Wed, Feb 12, 2014 at 3:10 PM, Ethan Furman <span dir="ltr"><<a href="mailto:ethan@stoneleaf.us" target="_blank">ethan@stoneleaf.us</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="HOEnZb"><div class="h5">On 02/12/2014 02:02 PM, yury.selivanov wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<a href="http://hg.python.org/cpython/rev/920304e1f36b" target="_blank">http://hg.python.org/cpython/<u></u>rev/920304e1f36b</a><br>
changeset:   89175:920304e1f36b<br>
user:        Yury Selivanov <<a href="mailto:yselivanov@sprymix.com" target="_blank">yselivanov@sprymix.com</a>><br>
date:        Wed Feb 12 17:01:52 2014 -0500<br>
summary:<br>
   asyncio.events: Use __slots__ in Handle and TimerHandle<br>
<br>
files:<br>
   Lib/asyncio/events.py |  4 ++++<br>
   1 files changed, 4 insertions(+), 0 deletions(-)<br>
<br>
<br>
diff --git a/Lib/asyncio/events.py b/Lib/asyncio/events.py<br>
--- a/Lib/asyncio/events.py<br>
+++ b/Lib/asyncio/events.py<br>
@@ -19,6 +19,8 @@<br>
  class Handle:<br>
      """Object returned by callback registration methods."""<br>
<br>
+    __slots__ = ['_callback', '_args', '_cancelled']<br>
+<br>
      def __init__(self, callback, args):<br>
          assert not isinstance(callback, Handle), 'A Handle is not a callback'<br>
          self._callback = callback<br>
@@ -46,6 +48,8 @@<br>
  class TimerHandle(Handle):<br>
      """Object returned by timed callback registration methods."""<br>
<br>
+    __slots__ = ['_when']<br>
+<br>
      def __init__(self, when, callback, args):<br>
          assert when is not None<br>
          super().__init__(callback, args)<br>
</blockquote>
<br></div></div>
Apologies up front if these are stupid questions, but:<br>
<br>
Why __slots__?  Are we going to have so many of these things that memory is an issue<br></blockquote><div><br></div><div>There's one of these created for every callback -- which includes every time 'yield from' blocks for a Future. The savings are primarily in allocation cost (no dicts to allocate).<br>

</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
The asserts in the code -- those are not for checking user input, correct?<br></blockquote><div><br></div><div>Yeah, this class is never instantiated directly by the user.<br></div></div><br>-- <br>--Guido van Rossum (<a href="http://python.org/~guido">python.org/~guido</a>)
</div></div>