Python weakref.ref() Examples
The following are 30
code examples of weakref.ref().
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example.
You may also want to check out all available functions/classes of the module
weakref
, or try the search function
.
Example #1
Source File: gen_test.py From tornado-zh with MIT License | 6 votes |
def test_task_refcounting(self): # On CPython, tasks and their arguments should be released immediately # without waiting for garbage collection. @gen.engine def f(): class Foo(object): pass arg = Foo() self.arg_ref = weakref.ref(arg) task = gen.Task(self.io_loop.add_callback, arg=arg) self.task_ref = weakref.ref(task) yield task self.stop() self.run_gen(f) self.assertIs(self.arg_ref(), None) self.assertIs(self.task_ref(), None)
Example #2
Source File: process.py From linter-pylama with MIT License | 6 votes |
def _start_queue_management_thread(self): # When the executor gets lost, the weakref callback will wake up # the queue management thread. def weakref_cb(_, q=self._result_queue): q.put(None) if self._queue_management_thread is None: self._queue_management_thread = threading.Thread( target=_queue_management_worker, args=(weakref.ref(self, weakref_cb), self._processes, self._pending_work_items, self._work_ids, self._call_queue, self._result_queue)) self._queue_management_thread.daemon = True self._queue_management_thread.start() _threads_queues[self._queue_management_thread] = self._result_queue
Example #3
Source File: _threading_local.py From jawfish with MIT License | 6 votes |
def create_dict(self): """Create a new dict for the current thread, and return it.""" localdict = {} key = self.key thread = current_thread() idt = id(thread) def local_deleted(_, key=key): # When the localimpl is deleted, remove the thread attribute. thread = wrthread() if thread is not None: del thread.__dict__[key] def thread_deleted(_, idt=idt): # When the thread is deleted, remove the local dict. # Note that this is suboptimal if the thread object gets # caught in a reference loop. We would like to be called # as soon as the OS-level thread ends instead. local = wrlocal() if local is not None: dct = local.dicts.pop(idt) wrlocal = ref(self, local_deleted) wrthread = ref(thread, thread_deleted) thread.__dict__[key] = wrlocal self.dicts[idt] = wrthread, localdict return localdict
Example #4
Source File: config.py From python-esppy with Apache License 2.0 | 6 votes |
def subscribe(func): ''' Add a subscriber function to option events Parameters ---------- func : callable A callable object that takes two parameters: key and value. This function is called with the name and value of any option that is set. Returns ------- None ''' if isinstance(func, types.MethodType): obj = six.get_method_self(func) func = six.get_method_function(func) _subscribers[func] = (weakref.ref(func), weakref.ref(obj)) else: _subscribers[func] = (weakref.ref(func), None)
Example #5
Source File: concurrency.py From dataflow with Apache License 2.0 | 6 votes |
def ensure_proc_terminate(proc): """ Make sure processes terminate when main process exit. Args: proc (multiprocessing.Process or list) """ if isinstance(proc, list): for p in proc: ensure_proc_terminate(p) return def stop_proc_by_weak_ref(ref): proc = ref() if proc is None: return if not proc.is_alive(): return proc.terminate() proc.join() assert isinstance(proc, mp.Process) atexit.register(stop_proc_by_weak_ref, weakref.ref(proc))
Example #6
Source File: thread.py From linter-pylama with MIT License | 6 votes |
def _adjust_thread_count(self): # When the executor gets lost, the weakref callback will wake up # the worker threads. def weakref_cb(_, q=self._work_queue): q.put(None) # TODO(bquinlan): Should avoid creating new threads if there are more # idle threads than items in the work queue. num_threads = len(self._threads) if num_threads < self._max_workers: thread_name = '%s_%d' % (self._thread_name_prefix or self, num_threads) t = threading.Thread(name=thread_name, target=_worker, args=(weakref.ref(self, weakref_cb), self._work_queue)) t.daemon = True t.start() self._threads.add(t) _threads_queues[t] = self._work_queue
Example #7
Source File: process.py From plugin.video.kmediatorrent with GNU General Public License v3.0 | 6 votes |
def _start_queue_management_thread(self): # When the executor gets lost, the weakref callback will wake up # the queue management thread. def weakref_cb(_, q=self._result_queue): q.put(None) if self._queue_management_thread is None: self._queue_management_thread = threading.Thread( target=_queue_management_worker, args=(weakref.ref(self, weakref_cb), self._processes, self._pending_work_items, self._work_ids, self._call_queue, self._result_queue)) self._queue_management_thread.daemon = True self._queue_management_thread.start() _threads_queues[self._queue_management_thread] = self._result_queue
Example #8
Source File: environment.py From recruit with Apache License 2.0 | 6 votes |
def lex(self, source, name=None, filename=None): """Lex the given sourcecode and return a generator that yields tokens as tuples in the form ``(lineno, token_type, value)``. This can be useful for :ref:`extension development <writing-extensions>` and debugging templates. This does not perform preprocessing. If you want the preprocessing of the extensions to be applied you have to filter source through the :meth:`preprocess` method. """ source = text_type(source) try: return self.lexer.tokeniter(source, name, filename) except TemplateSyntaxError: exc_info = sys.exc_info() self.handle_exception(exc_info, source_hint=source)
Example #9
Source File: gen_test.py From tornado-zh with MIT License | 6 votes |
def test_task_refcounting(self): # On CPython, tasks and their arguments should be released immediately # without waiting for garbage collection. @gen.engine def f(): class Foo(object): pass arg = Foo() self.arg_ref = weakref.ref(arg) task = gen.Task(self.io_loop.add_callback, arg=arg) self.task_ref = weakref.ref(task) yield task self.stop() self.run_gen(f) self.assertIs(self.arg_ref(), None) self.assertIs(self.task_ref(), None)
Example #10
Source File: process.py From misp42splunk with GNU Lesser General Public License v3.0 | 6 votes |
def _start_queue_management_thread(self): # When the executor gets lost, the weakref callback will wake up # the queue management thread. def weakref_cb(_, q=self._result_queue): q.put(None) if self._queue_management_thread is None: self._queue_management_thread = threading.Thread( target=_queue_management_worker, args=(weakref.ref(self, weakref_cb), self._processes, self._pending_work_items, self._work_ids, self._call_queue, self._result_queue)) self._queue_management_thread.daemon = True self._queue_management_thread.start() _threads_queues[self._queue_management_thread] = self._result_queue
Example #11
Source File: thread.py From misp42splunk with GNU Lesser General Public License v3.0 | 6 votes |
def _adjust_thread_count(self): # if idle threads are available, don't spin new threads if self._idle_semaphore.acquire(False): return # When the executor gets lost, the weakref callback will wake up # the worker threads. def weakref_cb(_, q=self._work_queue): q.put(None) num_threads = len(self._threads) if num_threads < self._max_workers: thread_name = '%s_%d' % (self._thread_name_prefix or self, num_threads) t = threading.Thread(name=thread_name, target=_worker, args=(weakref.ref(self, weakref_cb), self._work_queue)) t.daemon = True t.start() self._threads.add(t) _threads_queues[t] = self._work_queue
Example #12
Source File: environment.py From misp42splunk with GNU Lesser General Public License v3.0 | 6 votes |
def lex(self, source, name=None, filename=None): """Lex the given sourcecode and return a generator that yields tokens as tuples in the form ``(lineno, token_type, value)``. This can be useful for :ref:`extension development <writing-extensions>` and debugging templates. This does not perform preprocessing. If you want the preprocessing of the extensions to be applied you have to filter source through the :meth:`preprocess` method. """ source = text_type(source) try: return self.lexer.tokeniter(source, name, filename) except TemplateSyntaxError: exc_info = sys.exc_info() self.handle_exception(exc_info, source_hint=source)
Example #13
Source File: environment.py From misp42splunk with GNU Lesser General Public License v3.0 | 6 votes |
def lex(self, source, name=None, filename=None): """Lex the given sourcecode and return a generator that yields tokens as tuples in the form ``(lineno, token_type, value)``. This can be useful for :ref:`extension development <writing-extensions>` and debugging templates. This does not perform preprocessing. If you want the preprocessing of the extensions to be applied you have to filter source through the :meth:`preprocess` method. """ source = text_type(source) try: return self.lexer.tokeniter(source, name, filename) except TemplateSyntaxError: exc_info = sys.exc_info() self.handle_exception(exc_info, source_hint=source)
Example #14
Source File: weakref.py From aegea with Apache License 2.0 | 6 votes |
def __init__(self, obj, func, *args, **kwargs): if not self._registered_with_atexit: # We may register the exit function more than once because # of a thread race, but that is harmless import atexit atexit.register(self._exitfunc) finalize._registered_with_atexit = True info = self._Info() info.weakref = ref(obj, self) info.func = func info.args = args info.kwargs = kwargs or None info.atexit = True info.index = next(self._index_iter) self._registry[self] = info finalize._dirty = True
Example #15
Source File: tabbedbrowser.py From qutebrowser with GNU General Public License v3.0 | 5 votes |
def on_switch(self, old_tab: QWidget) -> None: """Record tab switch events.""" if self._ignore_next: self._ignore_next = False self._keep_deleted_next = False return tab = weakref.ref(old_tab) if self._stack_deleted and not self._keep_deleted_next: self._stack_deleted = [] self._keep_deleted_next = False self._stack.append(tab)
Example #16
Source File: pool.py From recruit with Apache License 2.0 | 5 votes |
def _set_request_state(self, sock_info): ident = self._ident tid = ident.get() if sock_info == NO_REQUEST: # Ending a request ident.unwatch(tid) self._tid_to_sock.pop(tid, None) else: self._tid_to_sock[tid] = sock_info if not ident.watching(): # Closure over tid, poolref, and ident. Don't refer directly to # self, otherwise there's a cycle. # Do not access threadlocals in this function, or any # function it calls! In the case of the Pool subclass and # mod_wsgi 2.x, on_thread_died() is triggered when mod_wsgi # calls PyThreadState_Clear(), which deferences the # ThreadVigil and triggers the weakref callback. Accessing # thread locals in this function, while PyThreadState_Clear() # is in progress can cause leaks, see PYTHON-353. poolref = weakref.ref(self) def on_thread_died(ref): try: ident.unwatch(tid) pool = poolref() if pool: # End the request request_sock = pool._tid_to_sock.pop(tid, None) # Was thread ever assigned a socket before it died? if request_sock not in (NO_REQUEST, NO_SOCKET_YET): pool._return_socket(request_sock) except: # Random exceptions on interpreter shutdown. pass ident.watch(on_thread_died)
Example #17
Source File: cursor_manager.py From recruit with Apache License 2.0 | 5 votes |
def __init__(self, connection): """Instantiate the manager. :Parameters: - `connection`: a Mongo Connection """ self.__dying_cursors = [] self.__max_dying_cursors = 20 self.__connection = weakref.ref(connection) CursorManager.__init__(self, connection)
Example #18
Source File: mongo_replica_set_client.py From recruit with Apache License 2.0 | 5 votes |
def register_monitor(monitor): ref = weakref.ref(monitor, _on_monitor_deleted) MONITORS.add(ref)
Example #19
Source File: thread_util.py From recruit with Apache License 2.0 | 5 votes |
def watch(self, callback): vigil = self._make_vigil() self._refs[id(vigil)] = weakref.ref(vigil, callback)
Example #20
Source File: thread_util.py From recruit with Apache License 2.0 | 5 votes |
def watch(self, callback): current = greenlet.getcurrent() tid = self.get() if hasattr(current, 'link'): # This is a Gevent Greenlet (capital G), which inherits from # greenlet and provides a 'link' method to detect when the # Greenlet exits. link = SpawnedLink(callback) current.rawlink(link) self._refs[tid] = link else: # This is a non-Gevent greenlet (small g), or it's the main # greenlet. self._refs[tid] = weakref.ref(current, callback)
Example #21
Source File: mongo_replica_set_client.py From recruit with Apache License 2.0 | 5 votes |
def shutdown_monitors(): # Keep a local copy of MONITORS as # shutting down threads has a side effect # of removing them from the MONITORS set() monitors = list(MONITORS) for ref in monitors: monitor = ref() if monitor: monitor.shutdown() monitor.join(10)
Example #22
Source File: rpc.py From brownie with MIT License | 5 votes |
def _notify_registry(height: int = None) -> None: gc.collect() if height is None: height = web3.eth.blockNumber for ref in _revert_refs.copy(): obj = ref() if obj is None: _revert_refs.remove(ref) elif height: obj._revert(height) else: obj._reset()
Example #23
Source File: rpc.py From brownie with MIT License | 5 votes |
def _revert_register(obj: object) -> None: _revert_refs.append(weakref.ref(obj))
Example #24
Source File: tabbedbrowser.py From qutebrowser with GNU General Public License v3.0 | 5 votes |
def prev(self, cur_tab: QWidget) -> QWidget: """Get the 'previous' tab in the stack. Throws IndexError on failure. """ tab = None # type: typing.Optional[QWidget] while tab is None or tab.pending_removal or tab is cur_tab: tab = self._stack.pop()() self._stack_deleted.append(weakref.ref(cur_tab)) self._ignore_next = True return tab
Example #25
Source File: environment.py From misp42splunk with GNU Lesser General Public License v3.0 | 5 votes |
def parse(self, source, name=None, filename=None): """Parse the sourcecode and return the abstract syntax tree. This tree of nodes is used by the compiler to convert the template into executable source- or bytecode. This is useful for debugging or to extract information from templates. If you are :ref:`developing Jinja2 extensions <writing-extensions>` this gives you a good overview of the node tree generated. """ try: return self._parse(source, name, filename) except TemplateSyntaxError: exc_info = sys.exc_info() self.handle_exception(exc_info, source_hint=source)
Example #26
Source File: thread.py From plugin.video.kmediatorrent with GNU General Public License v3.0 | 5 votes |
def _adjust_thread_count(self): # When the executor gets lost, the weakref callback will wake up # the worker threads. def weakref_cb(_, q=self._work_queue): q.put(None) # TODO(bquinlan): Should avoid creating new threads if there are more # idle threads than items in the work queue. if len(self._threads) < self._max_workers: t = threading.Thread(target=_worker, args=(weakref.ref(self, weakref_cb), self._work_queue)) t.daemon = True t.start() self._threads.add(t) _threads_queues[t] = self._work_queue
Example #27
Source File: environment.py From misp42splunk with GNU Lesser General Public License v3.0 | 5 votes |
def _load_template(self, name, globals): if self.loader is None: raise TypeError('no loader for this environment specified') cache_key = (weakref.ref(self.loader), name) if self.cache is not None: template = self.cache.get(cache_key) if template is not None and (not self.auto_reload or template.is_up_to_date): return template template = self.loader.load(self, name, globals) if self.cache is not None: self.cache[cache_key] = template return template
Example #28
Source File: environment.py From misp42splunk with GNU Lesser General Public License v3.0 | 5 votes |
def extend(self, **attributes): """Add the items to the instance of the environment if they do not exist yet. This is used by :ref:`extensions <writing-extensions>` to register callbacks and configuration values without breaking inheritance. """ for key, value in iteritems(attributes): if not hasattr(self, key): setattr(self, key, value)
Example #29
Source File: environment.py From misp42splunk with GNU Lesser General Public License v3.0 | 5 votes |
def _load_template(self, name, globals): if self.loader is None: raise TypeError('no loader for this environment specified') cache_key = (weakref.ref(self.loader), name) if self.cache is not None: template = self.cache.get(cache_key) if template is not None and (not self.auto_reload or template.is_up_to_date): return template template = self.loader.load(self, name, globals) if self.cache is not None: self.cache[cache_key] = template return template
Example #30
Source File: project_module.py From pyspider with Apache License 2.0 | 5 votes |
def __init__(self, projectdb): self.get_projectdb = weakref.ref(projectdb)