Skip to content

Instantly share code, notes, and snippets.

@isaacl
Created February 27, 2014 06:43
Show Gist options
  • Save isaacl/9245517 to your computer and use it in GitHub Desktop.
Save isaacl/9245517 to your computer and use it in GitHub Desktop.
ilevy@paxon:/c/2/prom/ndbleak_cur$ ipython -ic 'from ndb_test import *; print fetch_entities(); print len(wd); len(ndb.tasklets._state.all_pending)'
Python 2.7.3 (default, Sep 26 2013, 20:03:06)
Type "copyright", "credits" or "license" for more information.
IPython 0.13.2 -- An enhanced Interactive Python.
? -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help -> Python's own help system.
object? -> Details about 'object', use 'object??' for extra details.
^[[(22, 230000)
23
Out[1]: 15
In [1]: h = hp.heap()
In [2]: h
Out[2]:
Partition of a set of 11939 objects. Total size = 2347880 bytes.
Index Count % Size % Cumulative % Kind (class / dict of class)
0 40 0 923160 39 923160 39 unicode
1 9064 76 757024 32 1680184 72 str
2 436 4 127712 5 1807896 77 list
3 63 1 66024 3 1873920 80 dict of
google.appengine.datastore.entity_pb.EntityProto
4 63 1 66024 3 1939944 83 dict of google.appengine.datastore.entity_pb.Property
5 161 1 45080 2 1985024 85 dict of google.appengine.datastore.entity_pb.Path
6 161 1 45080 2 2030104 86 dict of
google.appengine.datastore.entity_pb.Path_Element
7 110 1 44624 2 2074728 88 dict (no owner)
8 143 1 40040 2 2114768 90 dict of dummy_thread.LockType
9 98 1 27440 1 2142208 91 dict of google.appengine.datastore.entity_pb.Reference
<115 more rows. Type e.g. '_.more' to view.>
In [3]: h & ndb.EventLoop
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-3-1c5cc99e09e3> in <module>()
----> 1 h & ndb.EventLoop
AttributeError: 'module' object has no attribute 'EventLoop'
In [4]: el = ndb.eventloop._state.eventloop
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-4-233238244c64> in <module>()
----> 1 el = ndb.eventloop._state.eventloop
AttributeError: '_State' object has no attribute 'eventloop'
In [5]: pp(vars(ndb.eventloop._state))
{'event_loop': <ndb.eventloop.EventLoop object at 0x361fe50>}
In [6]: el = ndb.eventloop._state.event_loop
In [7]: len(el.rpcs)
Out[7]: 3
In [8]: ents = h & Entity
In [9]: ents
Out[9]:
Partition of a set of 30 objects. Total size = 1920 bytes.
Index Count % Size % Cumulative % Kind (class / dict of class)
0 30 100 1920 100 1920 100 0x31bab90
In [10]: h & hp.idset([el])
Out[10]:
Partition of a set of 1 object. Total size = 64 bytes.
Index Count % Size % Cumulative % Kind (class / dict of class)
0 1 100 64 100 64 100 ndb.eventloop.EventLoop
In [11]: el_h = h & hp.idset([el])
In [12]: ents.byid[:10].get_shpaths(el_h)
Out[12]: 0: Src.__dict__['rpcs'][<google....x3807fd0>][1][3].gi_frame.f_locals['result']
In [13]: ents.byid[:10].get_shpaths(el_h.rpcs.values())
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-13-e6fdebfc87ef> in <module>()
----> 1 ents.byid[:10].get_shpaths(el_h.rpcs.values())
/usr/local/lib/python2.7/dist-packages/guppy/heapy/UniSet.pyc in __getattr__(self, other)
72 Get family-specific attribute.
73 """
---> 74 return self.fam.mod.View.enter(lambda:self.fam.c_getattr(self, other))
75
76 def __le__(self, other):
/usr/local/lib/python2.7/dist-packages/guppy/heapy/View.pyc in enter(self, func)
255
256 try:
--> 257 retval = func()
258 finally:
259 self.hv.limitframe = None
/usr/local/lib/python2.7/dist-packages/guppy/heapy/UniSet.pyc in <lambda>()
72 Get family-specific attribute.
73 """
---> 74 return self.fam.mod.View.enter(lambda:self.fam.c_getattr(self, other))
75
76 def __le__(self, other):
/usr/local/lib/python2.7/dist-packages/guppy/heapy/UniSet.pyc in c_getattr(self, a, b, args, kwds)
794 if b in d:
795 return d[b](a, *args, **kwds)
--> 796 return self.c_getattr2(a, b)
797
798 def c_getattr2(self, a, b):
/usr/local/lib/python2.7/dist-packages/guppy/heapy/UniSet.pyc in c_getattr2(self, a, b)
797
798 def c_getattr2(self, a, b):
--> 799 raise AttributeError, b
800
801 def c_get_render(self, a):
AttributeError: rpcs
In [14]: ents.byid[:10].get_shpaths(hp.idset(el.rpcs.values()))
Out[14]: 0: <1 tuple: 0x37eda50*3>[1][3].gi_frame.f_locals['result']
In [15]: ents.byid[:10].get_shpaths(hp.idset(el.rpcs.values()[1]))
Out[15]: 0: <1 tuple: 0x3864890*4>[3].gi_frame.f_locals['result']
In [16]: ents.byid[:10].get_shpaths(hp.idset(el.rpcs.values()[1][3]))
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-16-2a404b33fb92> in <module>()
----> 1 ents.byid[:10].get_shpaths(hp.idset(el.rpcs.values()[1][3]))
IndexError: tuple index out of range
In [17]: ents.byid[:10].get_shpaths(hp.idset(el.rpcs.values()[1]))
Out[17]: 0: <1 tuple: 0x3864890*4>[3].gi_frame.f_locals['result']
In [18]: hp.idset(el.rpcs.values()[1])
Out[18]:
Partition of a set of 3 objects. Total size = 448 bytes.
Index Count % Size % Cumulative % Kind (class / dict of class)
0 1 33 280 62 280 62 dict (no owner)
1 1 33 88 20 368 82 tuple
2 1 33 80 18 448 100 types.MethodType
In [19]: bad_rpc = el.rpcs.values()[1]
In [20]: bad_rpc
Out[20]:
(<bound method Future._on_rpc_completion of <Future 37ec750 created by helper(context.py:811) for tasklet run_to_queue(query.py:925); pending>>,
(<google.appengine.api.apiproxy_stub_map.UserRPC at 0x3807fd0>,
'',
<google.appengine.datastore.datastore_rpc.Connection at 0x361ffd0>,
<generator object run_to_queue at 0x3874be0>),
{})
In [21]: hp.idset(el.rpcs.values()[1])
KeyboardInterrupt
In [21]: ents.byid[:10].get_shpaths(hp.idset(el.rpcs.values()[1][1]))
Out[21]: 0: <1 types.GeneratorType: 0x3874be0>.gi_frame.f_locals['result']
In [22]: pp(bad_rpc.gi_frame.f_locals['result'])
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-22-4a95f8165ee4> in <module>()
----> 1 pp(bad_rpc.gi_frame.f_locals['result'])
AttributeError: 'tuple' object has no attribute 'gi_frame'
In [23]: pp(bad_rpc[1].gi_frame.f_locals['result'])
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-23-6a1d3fc6ca50> in <module>()
----> 1 pp(bad_rpc[1].gi_frame.f_locals['result'])
AttributeError: 'tuple' object has no attribute 'gi_frame'
In [24]: pp(bad_rpc[1][1].gi_frame.f_locals['result'])
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-24-a27fc38a94fb> in <module>()
----> 1 pp(bad_rpc[1][1].gi_frame.f_locals['result'])
AttributeError: 'str' object has no attribute 'gi_frame'
In [25]: pp(bad_rpc[2].gi_frame.f_locals['result'])
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-25-fc5235f63192> in <module>()
----> 1 pp(bad_rpc[2].gi_frame.f_locals['result'])
AttributeError: 'dict' object has no attribute 'gi_frame'
In [26]: pp(bad_rpc[1][2].gi_frame.f_locals['result'])
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-26-6941ee11c21d> in <module>()
----> 1 pp(bad_rpc[1][2].gi_frame.f_locals['result'])
AttributeError: 'Connection' object has no attribute 'gi_frame'
In [27]: pp(bad_rpc[1][3].gi_frame.f_locals['result'])
Entity(key=Key('Entity', 20), val=u'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...')
In [28]: ents.byid[:10].get_shpaths(hp.idset(el.rpcs.values()[1][1]))
Out[28]: 0: <1 types.GeneratorType: 0x3874be0>.gi_frame.f_locals['result']
In [29]: ents.byid[5:10].get_shpaths(hp.idset(el.rpcs.values()[1][1]))
Out[29]: 0: <1 types.GeneratorType: 0x3874be0>.gi_frame.f_locals['result']
In [30]: ents.byid[5:10].get_shpaths(hp.idset(el.rpcs.values()[1]))
Out[30]: 0: <1 tuple: 0x3864890*4>[3].gi_frame.f_locals['result']
In [31]: ents.byid[5].get_shpaths(hp.idset(el.rpcs.values()[1]))
Out[31]:
0: <1 tuple: 0x3864890*4>[3].gi_frame.f_locals['queue'].__dict__['_waiting'].??.__dict__['_callbacks'][0][1][3].gi_frame.f_locals['callback'].__self__.__dict__['_batch'].__dict__['_Batch__results'][6]
1: <1 tuple: 0x3864890*4>[3].gi_frame.f_locals['queue'].__dict__['_waiting'].??.__dict__['_callbacks'][0][1][3].gi_frame.f_locals['callback'].im_self.__dict__['_batch'].__dict__['_Batch__results'][6]
2: <1 tuple: 0x3864890*4>[3].gi_frame.f_locals['queue'].__dict__['_waiting'].??.__dict__['_callbacks'][0][1][3].gi_frame.f_locals['callback']->ob_ref.__self__.__dict__['_batch'].__dict__['_Batch__results'][6]
3: <1 tuple: 0x3864890*4>[3].gi_frame.f_locals['queue'].__dict__['_waiting'].??.__dict__['_callbacks'][0][1][3].gi_frame.f_locals['callback']->ob_ref.im_self.__dict__['_batch'].__dict__['_Batch__results'][6]
In [32]: ents.byid[5].get_shpaths(hp.idset(el.rpcs.values()[1]))
[1]+ Stopped ipython -ic 'from ndb_test import *; print fetch_entities(); print len(wd); len(ndb.tasklets._state.all_pending)'
ilevy@paxon:/c/2/prom/ndbleak_cur$ fg
ipython -ic 'from ndb_test import *; print fetch_entities(); print len(wd); len(ndb.tasklets._state.all_pending)'
Out[32]:
0: <1 tuple: 0x3864890*4>[3].gi_frame.f_locals['queue'].__dict__['_waiting'].??.__dict__['_callbacks'][0][1][3].gi_frame.f_locals['callback'].__self__.__dict__['_batch'].__dict__['_Batch__results'][6]
1: <1 tuple: 0x3864890*4>[3].gi_frame.f_locals['queue'].__dict__['_waiting'].??.__dict__['_callbacks'][0][1][3].gi_frame.f_locals['callback'].im_self.__dict__['_batch'].__dict__['_Batch__results'][6]
2: <1 tuple: 0x3864890*4>[3].gi_frame.f_locals['queue'].__dict__['_waiting'].??.__dict__['_callbacks'][0][1][3].gi_frame.f_locals['callback']->ob_ref.__self__.__dict__['_batch'].__dict__['_Batch__results'][6]
3: <1 tuple: 0x3864890*4>[3].gi_frame.f_locals['queue'].__dict__['_waiting'].??.__dict__['_callbacks'][0][1][3].gi_frame.f_locals['callback']->ob_ref.im_self.__dict__['_batch'].__dict__['_Batch__results'][6]
In [33]: el.rpcs.values()[1]
Out[33]:
(<bound method Future._on_rpc_completion of <Future 37ec750 created by helper(context.py:811) for tasklet run_to_queue(query.py:925); pending>>,
(<google.appengine.api.apiproxy_stub_map.UserRPC at 0x3807fd0>,
'',
<google.appengine.datastore.datastore_rpc.Connection at 0x361ffd0>,
<generator object run_to_queue at 0x3874be0>),
{})
In [34]: el.rpcs.values()[1][1][3]
Out[34]: <generator object run_to_queue at 0x3874be0>
In [35]: que = el.rpcs.values()[1][1][3].gi_frame.f_locals['queue']
In [36]: que
Out[36]: <3 SerialQueueFuture 37ec190 created by helper(context.py:810)>
In [37]: vars(que)
Out[37]:
{'_callbacks': [],
'_context': None,
'_done': False,
'_exception': None,
'_full': False,
'_immediate_callbacks': [],
'_info': None,
'_next': None,
'_queue': deque([]),
'_result': None,
'_traceback': None,
'_waiting': deque([<Future 385f6d0 created by helper(context.py:814); pending>]),
'_where': ['__init__(tasklets.py:781)',
'helper(context.py:810)',
'_help_tasklet_along(tasklets.py:372) # initial generator helper(context.py:807)',
'run0(eventloop.py:183)',
'run1(eventloop.py:222)',
'wait(tasklets.py:305)',
'check_success(tasklets.py:321)',
'get_result(tasklets.py:326)',
'fetch_page(query.py:1326)',
'fetcher(ndb_test.py:74)'],
'id': 3}
In [38]: ft = iter(que._waiting).next()
In [39]: ft
Out[39]: <Future 385f6d0 created by helper(context.py:814); pending>
In [40]: ents.byid[5].get_shpaths(hp.idset(que._waiting))
Out[40]:
0: Src.__dict__['_callbacks'][0][1][3].gi_frame.f_locals['callback'].__self__.__dict__['_batch'].__dict__['_Batch__results'][6]
1: Src.__dict__['_callbacks'][0][1][3].gi_frame.f_locals['callback'].im_self.__dict__['_batch'].__dict__['_Batch__results'][6]
2: Src.__dict__['_callbacks'][0][1][3].gi_frame.f_locals['callback']->ob_ref.__self__.__dict__['_batch'].__dict__['_Batch__results'][6]
3: Src.__dict__['_callbacks'][0][1][3].gi_frame.f_locals['callback']->ob_ref.im_self.__dict__['_batch'].__dict__['_Batch__results'][6]
In [41]: ft._callbacks
Out[41]:
[(<bound method Future._on_future_completion of <Future 361f590 created by map_query(context.py:839) for tasklet helper(context.py:807) suspended generator helper(context.py:814); pending>>,
(<Future 385f6d0 created by helper(context.py:814); pending>,
'',
<google.appengine.datastore.datastore_rpc.Connection at 0x361ffd0>,
<generator object helper at 0x3607780>),
{})]
In [42]: ft._callbacks[0][1][3].gi_frame.f_locals
Out[42]:
{'batch': None,
'callback': <bound method QueryIterator._extended_callback of <ndb.query.QueryIterator object at 0x361f690>>,
'ent': Entity(key=Key('Entity', 20), val=u'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...'),
'i': 9,
'inq': <3 SerialQueueFuture 37ec190 created by helper(context.py:810)>,
'mfut': <2 SerialQueueFuture 361f410 created by iter_query(context.py:868)>,
'options': QueryOptions(batch_size=10, limit=11, produce_cursors=True, start_cursor=Cursor(<E-ABAIICE2oDZm9vcgwLEgZFbnRpdHkYCgwU>)),
'pass_batch_into_callback': True,
'query': Query(kind='Entity'),
'self': <ndb.context.Context at 0x3235cd0>,
'val': Entity(key=Key('Entity', 20), val=u'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...')}
In [43]: ppn(ents.byid[5])
Entity(key=Key('Entity', 17), val=u'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
In [44]: ft._callbacks[0][1][3].gi_frame.f_locals['callback'].im_self._batch
Out[44]: <google.appengine.datastore.datastore_query.Batch at 0x38087d0>
In [45]: ft._callbacks[0][1][3].gi_frame.f_locals['callback'].im_self._batch._Batch_results
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-45-936892c3b63c> in <module>()
----> 1 ft._callbacks[0][1][3].gi_frame.f_locals['callback'].im_self._batch._Batch_results
AttributeError: 'Batch' object has no attribute '_Batch_results'
In [46]: ft._callbacks[0][1][3].gi_frame.f_locals['callback'].im_self._batch._Batch__results
Out[46]:
[Entity(key=Key('Entity', 11), val=u'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...'),
Entity(key=Key('Entity', 12), val=u'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...'),
Entity(key=Key('Entity', 13), val=u'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...'),
Entity(key=Key('Entity', 14), val=u'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...'),
Entity(key=Key('Entity', 15), val=u'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...'),
Entity(key=Key('Entity', 16), val=u'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...'),
Entity(key=Key('Entity', 17), val=u'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...'),
Entity(key=Key('Entity', 18), val=u'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...'),
Entity(key=Key('Entity', 19), val=u'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...'),
Entity(key=Key('Entity', 20), val=u'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...')]
In [47]: ft._callbacks[0][1][3].gi_frame.f_locals['callback'].im_self._batch
Out[47]: <google.appengine.datastore.datastore_query.Batch at 0x38087d0>
In [48]: ft._callbacks[0][1][3].gi_frame.f_locals['callback'].im_self
Out[48]: <ndb.query.QueryIterator at 0x361f690>
In [49]: ft._callbacks[0][1][3].gi_frame.f_locals['callback']
Out[49]: <bound method QueryIterator._extended_callback of <ndb.query.QueryIterator object at 0x361f690>>
In [50]: ft._callbacks[0][1][3].gi_frame.f_locals['callback'].im_self
Out[50]: <ndb.query.QueryIterator at 0x361f690>
In [51]: vars(ft._callbacks[0][1][3].gi_frame.f_locals['callback'].im_self)
Out[51]:
{'_batch': <google.appengine.datastore.datastore_query.Batch at 0x38087d0>,
'_fut': None,
'_index': 9,
'_iter': <2 SerialQueueFuture 361f410 created by iter_query(context.py:868)>,
'_lookahead': []}
In [52]:
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment