Python源码示例:weakref.WeakSet()
示例1
def on(event, callback):
"""Call `callback` on `event`
Register `callback` to be run when `event` occurs.
Example:
>>> def on_init():
... print("Init happened")
...
>>> on("init", on_init)
>>> del on_init
Arguments:
event (str): Name of event
callback (callable): Any callable
"""
if event not in _registered_event_handlers:
_registered_event_handlers[event] = weakref.WeakSet()
events = _registered_event_handlers[event]
events.add(callback)
示例2
def test_leaks(self):
def _get_items():
items, stops = [], []
for creator in _CREATORS:
item, stop = creator()
items.append(item)
stops.append(stop)
[stop() for stop in stops]
return weakref.WeakSet(items)
items = _get_items()
_pause()
# If this next line were uncommented, it would work without all the
# weakrefs in the code.
# gc.collect()
self.assertEqual(list(items), [])
示例3
def test_multi_ordered_dict():
ref = _MultiOrderedDict_NSquared()
test = MultiOrderedDict()
ref_wset = weakref.WeakSet()
test_wset = weakref.WeakSet()
rng = np.random.RandomState()
tests = [
_test_a,
_test_b,
_test_c,
_test_d,
_test_e,
_test_f,
_test_g,
_test_h,
]
for _ in range(5000):
i = rng.randint(0, len(tests))
tests[i](ref, test, ref_wset, test_wset, rng, False)
示例4
def __init__(
self, token: CancelToken = None, loop: asyncio.AbstractEventLoop = None
) -> None:
self.events = ServiceEvents()
self._run_lock = asyncio.Lock()
self._child_services = WeakSet()
self._tasks = WeakSet()
self._finished_callbacks = []
self._loop = loop
base_token = CancelToken(type(self).__name__, loop=loop)
if token is None:
self.cancel_token = base_token
else:
self.cancel_token = base_token.chain(token)
示例5
def __init__(self,
url,
pooling=hgvs.global_config.uta.pooling,
application_name=None,
mode=None,
cache=None):
if url.schema is None:
raise Exception("No schema name provided in {url}".format(url=url))
self.application_name = application_name
self.pooling = pooling
self._conn = None
# If we're using connection pooling, track the set of DB
# connections we've seen; on first use we set the schema
# search path. Use weak references to avoid keeping connection
# objects alive unnecessarily.
self._conns_seen = weakref.WeakSet()
super(UTA_postgresql, self).__init__(url, mode, cache)
示例6
def test_memory_usage(sentry_init, capture_events, args, expected_refcount):
sentry_init(**args)
references = weakref.WeakSet()
with start_transaction(name="hi"):
for i in range(100):
with start_span(op="helloworld", description="hi {}".format(i)) as span:
def foo():
pass
references.add(foo)
span.set_tag("foo", foo)
pass
del foo
del span
# required only for pypy (cpython frees immediately)
gc.collect()
assert len(references) == expected_refcount
示例7
def test_union(self):
u = self.s.union(self.items2)
for c in self.letters:
self.assertEqual(c in u, c in self.d or c in self.items2)
self.assertEqual(self.s, WeakSet(self.items))
self.assertEqual(type(u), WeakSet)
self.assertRaises(TypeError, self.s.union, [[]])
for C in set, frozenset, dict.fromkeys, list, tuple:
x = WeakSet(self.items + self.items2)
c = C(self.items2)
self.assertEqual(self.s.union(c), x)
del c
self.assertEqual(len(u), len(self.items) + len(self.items2))
self.items2.pop()
gc.collect()
self.assertEqual(len(u), len(self.items) + len(self.items2))
示例8
def test_len_cycles(self):
N = 20
items = [RefCycle() for i in range(N)]
s = WeakSet(items)
del items
it = iter(s)
try:
next(it)
except StopIteration:
pass
gc.collect()
n1 = len(s)
del it
gc.collect()
n2 = len(s)
# one item may be kept alive inside the iterator
self.assertIn(n1, (0, 1))
self.assertEqual(n2, 0)
示例9
def test_len_race(self):
# Extended sanity checks for len() in the face of cyclic collection
self.addCleanup(gc.set_threshold, *gc.get_threshold())
for th in range(1, 100):
N = 20
gc.collect(0)
gc.set_threshold(th, th, th)
items = [RefCycle() for i in range(N)]
s = WeakSet(items)
del items
# All items will be collected at next garbage collection pass
it = iter(s)
try:
next(it)
except StopIteration:
pass
n1 = len(s)
del it
n2 = len(s)
self.assertGreaterEqual(n1, 0)
self.assertLessEqual(n1, N)
self.assertGreaterEqual(n2, 0)
self.assertLessEqual(n2, n1)
示例10
def __init__(self, cls, has_weakref=True):
self._refs = weakref.WeakSet()
# Create a weak referenceable subclass if necessary
if not has_weakref:
class __weakref_cls__(cls):
__slots__ = ('__weakref__',)
else:
__weakref_cls__ = cls
def override_new(original_cls, *args, **kwargs):
"""Function replacing new allowing to track instances.
"""
new = __weakref_cls__.__old_new__(__weakref_cls__, *args, **kwargs)
self._refs.add(new)
return new
__weakref_cls__.__old_new__ = cls.__new__
cls.__new__ = override_new
__weakref_cls__.original_cls = cls
self.cls = __weakref_cls__
示例11
def connect(self, slot, sender=None):
if sender:
if inspect.ismethod(slot):
if sender not in self._methods_subs:
self._methods_subs[sender] = weakref.WeakKeyDictionary()
if slot.__self__ not in self._methods_subs[sender]:
self._methods_subs[sender][slot.__self__] = set()
self._methods_subs[sender][slot.__self__].add(slot.__func__)
else:
if sender not in self._functions_subs:
self._functions_subs[sender] = weakref.WeakSet()
self._functions_subs[sender].add(slot)
else:
if inspect.ismethod(slot):
if slot.__self__ not in self._methods:
self._methods[slot.__self__] = set()
self._methods[slot.__self__].add(slot.__func__)
else:
self._functions.add(slot)
示例12
def __init__(self, nethost: str, netport: int, auto_shutdown: bool,
max_protocol: Tuple[int, int], **kwargs):
super().__init__(**kwargs)
self._nethost = nethost
self._netport = netport
self._edgecon_id = 0
self._num_connections = 0
self._servers = []
self._backends = weakref.WeakSet()
self._auto_shutdown = auto_shutdown
self._accepting = False
self._max_protocol = max_protocol
示例13
def test_union(self):
u = self.s.union(self.items2)
for c in self.letters:
self.assertEqual(c in u, c in self.d or c in self.items2)
self.assertEqual(self.s, WeakSet(self.items))
self.assertEqual(type(u), WeakSet)
self.assertRaises(TypeError, self.s.union, [[]])
for C in set, frozenset, dict.fromkeys, list, tuple:
x = WeakSet(self.items + self.items2)
c = C(self.items2)
self.assertEqual(self.s.union(c), x)
del c
self.assertEqual(len(u), len(self.items) + len(self.items2))
self.items2.pop()
gc.collect()
self.assertEqual(len(u), len(self.items) + len(self.items2))
示例14
def test_len_cycles(self):
N = 20
items = [RefCycle() for i in range(N)]
s = WeakSet(items)
del items
it = iter(s)
try:
next(it)
except StopIteration:
pass
gc.collect()
n1 = len(s)
del it
gc.collect()
n2 = len(s)
# one item may be kept alive inside the iterator
self.assertIn(n1, (0, 1))
self.assertEqual(n2, 0)
示例15
def test_len_race(self):
# Extended sanity checks for len() in the face of cyclic collection
self.addCleanup(gc.set_threshold, *gc.get_threshold())
for th in range(1, 100):
N = 20
gc.collect(0)
gc.set_threshold(th, th, th)
items = [RefCycle() for i in range(N)]
s = WeakSet(items)
del items
# All items will be collected at next garbage collection pass
it = iter(s)
try:
next(it)
except StopIteration:
pass
n1 = len(s)
del it
n2 = len(s)
self.assertGreaterEqual(n1, 0)
self.assertLessEqual(n1, N)
self.assertGreaterEqual(n2, 0)
self.assertLessEqual(n2, n1)
示例16
def test_union(self):
u = self.s.union(self.items2)
for c in self.letters:
self.assertEqual(c in u, c in self.d or c in self.items2)
self.assertEqual(self.s, WeakSet(self.items))
self.assertEqual(type(u), WeakSet)
self.assertRaises(TypeError, self.s.union, [[]])
for C in set, frozenset, dict.fromkeys, list, tuple:
x = WeakSet(self.items + self.items2)
c = C(self.items2)
self.assertEqual(self.s.union(c), x)
del c
self.assertEqual(len(u), len(self.items) + len(self.items2))
self.items2.pop()
gc.collect()
self.assertEqual(len(u), len(self.items) + len(self.items2))
示例17
def test_len_cycles(self):
N = 20
items = [RefCycle() for i in range(N)]
s = WeakSet(items)
del items
it = iter(s)
try:
next(it)
except StopIteration:
pass
gc.collect()
n1 = len(s)
del it
gc.collect()
n2 = len(s)
# one item may be kept alive inside the iterator
self.assertIn(n1, (0, 1))
self.assertEqual(n2, 0)
示例18
def test_len_race(self):
# Extended sanity checks for len() in the face of cyclic collection
self.addCleanup(gc.set_threshold, *gc.get_threshold())
for th in range(1, 100):
N = 20
gc.collect(0)
gc.set_threshold(th, th, th)
items = [RefCycle() for i in range(N)]
s = WeakSet(items)
del items
# All items will be collected at next garbage collection pass
it = iter(s)
try:
next(it)
except StopIteration:
pass
n1 = len(s)
del it
n2 = len(s)
self.assertGreaterEqual(n1, 0)
self.assertLessEqual(n1, N)
self.assertGreaterEqual(n2, 0)
self.assertLessEqual(n2, n1)
示例19
def __init__(self, con, hdfs_client=None, **params):
import hdfs
self.con = con
if isinstance(hdfs_client, hdfs.Client):
hdfs_client = WebHDFS(hdfs_client)
elif hdfs_client is not None and not isinstance(hdfs_client, HDFS):
raise TypeError(hdfs_client)
self._hdfs = hdfs_client
self._kudu = None
self._temp_objects = weakref.WeakSet()
self._ensure_temp_db_exists()
示例20
def save_weakset(self, obj):
self.save_reduce(weakref.WeakSet, (list(obj),))
示例21
def stream_app_ctx(app: web.Application) -> AsyncIterator[None]:
app['stream_pty_handlers'] = defaultdict(weakref.WeakSet)
app['stream_execute_handlers'] = defaultdict(weakref.WeakSet)
app['stream_proxy_handlers'] = defaultdict(weakref.WeakSet)
app['stream_stdin_socks'] = defaultdict(weakref.WeakSet)
app['zctx'] = zmq.asyncio.Context()
event_dispatcher = app['event_dispatcher']
event_dispatcher.subscribe('kernel_terminated', app, kernel_terminated)
yield
cancelled_tasks: List[asyncio.Task] = []
for per_kernel_handlers in app['stream_pty_handlers'].values():
for handler in list(per_kernel_handlers):
if not handler.done():
handler.cancel()
cancelled_tasks.append(handler)
for per_kernel_handlers in app['stream_execute_handlers'].values():
for handler in list(per_kernel_handlers):
if not handler.done():
handler.cancel()
cancelled_tasks.append(handler)
for per_kernel_handlers in app['stream_proxy_handlers'].values():
for handler in list(per_kernel_handlers):
if not handler.done():
handler.cancel()
cancelled_tasks.append(handler)
await asyncio.gather(*cancelled_tasks, return_exceptions=True)
app['zctx'].term()
示例22
def __init__(self, odoo, db, uid, context):
self._odoo = odoo
self._db = db
self._uid = uid
self._context = context
self._registry = {}
self._dirty = weakref.WeakSet() # set of records updated locally
示例23
def __init__(self, sock: socket.socket, objectId: str = None, keep_open: bool = False) -> None:
self.sock = sock
self.objectId = objectId
self.pyroInstances = {} # type: Dict[Type, Any] # pyro objects for instance_mode=session
self.tracked_resources = weakref.WeakSet() # type: weakref.WeakSet[Any] # weakrefs to resources for this connection
self.keep_open = keep_open
示例24
def build_tileable_graph(tileables, executed_tileable_keys, graph=None):
from .operands import Fetch
from .tiles import TileableGraphBuilder
with build_mode():
node_to_copy = weakref.WeakKeyDictionary()
node_to_fetch = weakref.WeakKeyDictionary()
copied = weakref.WeakSet()
def replace_with_fetch_or_copy(n):
n = n.data if hasattr(n, 'data') else n
if n in copied:
return n
if n.key in executed_tileable_keys:
if n not in node_to_fetch:
c = node_to_copy[n] = node_to_fetch[n] = build_fetch(n).data
copied.add(c)
return node_to_fetch[n]
if n not in node_to_copy:
copy_op = n.op.copy()
params = []
for o in n.op.outputs:
p = o.params.copy()
p.update(o.extra_params)
p['_key'] = o.key
if isinstance(o.op, Fetch):
# chunks may be generated in the remote functions,
# thus bring chunks and nsplits for serialization
p['chunks'] = o.chunks
p['nsplits'] = o.nsplits
params.append(p)
copies = copy_op.new_tileables([replace_with_fetch_or_copy(inp) for inp in n.inputs],
kws=params, output_limit=len(params))
for o, copy in zip(n.op.outputs, copies):
node_to_copy[o] = copy.data
copied.add(copy.data)
return node_to_copy[n]
tileable_graph_builder = TileableGraphBuilder(
graph=graph, node_processor=replace_with_fetch_or_copy)
return tileable_graph_builder.build(tileables)
示例25
def __init__(self, *args, **kwargs):
if kwargs.get('_nsplits', None) is not None:
kwargs['_nsplits'] = tuple(tuple(s) for s in kwargs['_nsplits'])
super().__init__(*args, **kwargs)
if hasattr(self, '_chunks') and self._chunks:
self._chunks = sorted(self._chunks, key=attrgetter('index'))
self._entities = WeakSet()
self._executed_sessions = []
示例26
def _add_observer(self, data, entity):
# only tileable data should be considered
assert isinstance(data, TileableData)
assert isinstance(entity, TileableEntity)
if data not in self._data_to_entities:
self._data_to_entities[data] = WeakSet()
self._data_to_entities[data].add(entity)
示例27
def setUp(self):
# need to keep references to them
self.items = [SomeClass(c) for c in ('a', 'b', 'c')]
self.items2 = [SomeClass(c) for c in ('x', 'y', 'z')]
self.letters = [SomeClass(c) for c in string.ascii_letters]
self.ab_items = [SomeClass(c) for c in 'ab']
self.abcde_items = [SomeClass(c) for c in 'abcde']
self.def_items = [SomeClass(c) for c in 'def']
self.ab_weakset = WeakSet(self.ab_items)
self.abcde_weakset = WeakSet(self.abcde_items)
self.def_weakset = WeakSet(self.def_items)
self.s = WeakSet(self.items)
self.d = dict.fromkeys(self.items)
self.obj = SomeClass('F')
self.fs = WeakSet([self.obj])
示例28
def test_methods(self):
weaksetmethods = dir(WeakSet)
for method in dir(set):
if method == 'test_c_api' or method.startswith('_'):
continue
self.assertIn(method, weaksetmethods,
"WeakSet missing method " + method)
示例29
def test_new_or_init(self):
self.assertRaises(TypeError, WeakSet, [], 2)
示例30
def test_intersection(self):
s = WeakSet(self.letters)
i = s.intersection(self.items2)
for c in self.letters:
self.assertEqual(c in i, c in self.items2 and c in self.letters)
self.assertEqual(s, WeakSet(self.letters))
self.assertEqual(type(i), WeakSet)
for C in set, frozenset, dict.fromkeys, list, tuple:
x = WeakSet([])
self.assertEqual(i.intersection(C(self.items)), x)
self.assertEqual(len(i), len(self.items2))
self.items2.pop()
gc.collect()
self.assertEqual(len(i), len(self.items2))