Python weakref.finalize() Examples
The following are 30
code examples of weakref.finalize().
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: compat.py From pipenv with MIT License | 6 votes |
def __init__(self, suffix="", prefix=None, dir=None): if "RAM_DISK" in os.environ: import uuid name = uuid.uuid4().hex dir_name = os.path.join(os.environ["RAM_DISK"].strip(), name) os.mkdir(dir_name) self.name = dir_name else: suffix = suffix if suffix else "" if not prefix: self.name = mkdtemp(suffix=suffix, dir=dir) else: self.name = mkdtemp(suffix, prefix, dir) self._finalizer = finalize( self, self._cleanup, self.name, warn_message="Implicitly cleaning up {!r}".format(self), )
Example #2
Source File: browser.py From xbmc with GNU General Public License v3.0 | 6 votes |
def __init__(self, session=None, soup_config={'features': 'lxml'}, requests_adapters=None, raise_on_404=False, user_agent=None): self.raise_on_404 = raise_on_404 self.session = session or requests.Session() if hasattr(weakref, 'finalize'): self._finalize = weakref.finalize(self.session, self.close) else: # pragma: no cover # Python < 3 does not have weakref.finalize, but these # versions accept calling session.close() within __del__ self._finalize = self.close self.set_user_agent(user_agent) if requests_adapters is not None: for adaptee, adapter in requests_adapters.items(): self.session.mount(adaptee, adapter) self.soup_config = soup_config or dict()
Example #3
Source File: test_workers.py From Naumachia with MIT License | 6 votes |
def assertCalled(test, times=None): def decorator(fn): fn._called = 0 def finalize(fn): if times is not None: test.assertEqual(fn._called, times, "Function '{}' was not called the correct number of times".format(fn.__name__)) else: test.assertTrue(fn._called, "Function '{}' was never called".format(fn.__name__)) weakref.finalize(fn, finalize, fn) @wraps(fn) def wrapper(*args, **kwargs): fn._called += 1 fn(*args, **kwargs) return wrapper return decorator
Example #4
Source File: storage.py From optuna with MIT License | 6 votes |
def __init__(self, url, engine_kwargs=None, skip_compatibility_check=False): # type: (str, Optional[Dict[str, Any]], bool) -> None self.engine_kwargs = engine_kwargs or {} self.url = self._fill_storage_url_template(url) self.skip_compatibility_check = skip_compatibility_check self._set_default_engine_kwargs_for_mysql(url, self.engine_kwargs) try: self.engine = create_engine(self.url, **self.engine_kwargs) except ImportError as e: raise ImportError( "Failed to import DB access module for the specified storage URL. " "Please install appropriate one. (The actual import error is: " + str(e) + ".)" ) self.scoped_session = orm.scoped_session(orm.sessionmaker(bind=self.engine)) models.BaseModel.metadata.create_all(self.engine) self._version_manager = _VersionManager(self.url, self.engine, self.scoped_session) if not skip_compatibility_check: self._version_manager.check_table_schema_compatibility() weakref.finalize(self, self._finalize)
Example #5
Source File: __init__.py From schedula with European Union Public License 1.1 | 6 votes |
def run(self, **options): self.shutdown() import threading options = combine_dicts(self.run_options, options) memo = os.environ.get("WERKZEUG_RUN_MAIN") try: os.environ["WERKZEUG_RUN_MAIN"] = "true" threading.Thread( target=run_server, args=(self.app(), self.get_port(**options)) ).start() # noinspection PyArgumentList self.shutdown = weakref.finalize(self, self.shutdown_site, self.url) self.wait_server() finally: if memo is None: os.environ.pop("WERKZEUG_RUN_MAIN") else: os.environ["WERKZEUG_RUN_MAIN"] = memo return self
Example #6
Source File: test_weakref.py From ironpython3 with Apache License 2.0 | 6 votes |
def test_all_freed(self): # we want a weakrefable subclass of weakref.finalize class MyFinalizer(weakref.finalize): pass a = self.A() res = [] def callback(): res.append(123) f = MyFinalizer(a, callback) wr_callback = weakref.ref(callback) wr_f = weakref.ref(f) del callback, f self.assertIsNotNone(wr_callback()) self.assertIsNotNone(wr_f()) del a self._collect_if_necessary() self.assertIsNone(wr_callback()) self.assertIsNone(wr_f()) self.assertEqual(res, [123])
Example #7
Source File: test_weakref.py From ironpython3 with Apache License 2.0 | 6 votes |
def run_in_child(cls): def error(): # Create an atexit finalizer from inside a finalizer called # at exit. This should be the next to be run. g1 = weakref.finalize(cls, print, 'g1') print('f3 error') 1/0 # cls should stay alive till atexit callbacks run f1 = weakref.finalize(cls, print, 'f1', _global_var) f2 = weakref.finalize(cls, print, 'f2', _global_var) f3 = weakref.finalize(cls, error) f4 = weakref.finalize(cls, print, 'f4', _global_var) assert f1.atexit == True f2.atexit = False assert f3.atexit == True assert f4.atexit == True
Example #8
Source File: path.py From qiime2 with BSD 3-Clause "New" or "Revised" License | 6 votes |
def __new__(cls, dir=False, **kwargs): """ Create a tempfile, return pathlib.Path reference to it. """ if dir: name = tempfile.mkdtemp(**kwargs) else: fd, name = tempfile.mkstemp(**kwargs) # fd is now assigned to our process table, but we don't need to do # anything with the file. We will call `open` on the `name` later # producing a different file descriptor, so close this one to # prevent a resource leak. os.close(fd) obj = super().__new__(cls, name) obj._destructor = weakref.finalize(obj, cls._destruct, str(obj)) return obj
Example #9
Source File: remote_executor.py From federated with Apache License 2.0 | 6 votes |
def __init__(self, value_ref: executor_pb2.ValueRef, type_spec, executor): """Creates the value. Args: value_ref: An instance of `executor_pb2.ValueRef` returned by the remote executor service. type_spec: An instance of `computation_types.Type`. executor: The executor that created this value. """ py_typecheck.check_type(value_ref, executor_pb2.ValueRef) py_typecheck.check_type(type_spec, computation_types.Type) py_typecheck.check_type(executor, RemoteExecutor) self._value_ref = value_ref self._type_signature = type_spec self._executor = executor # Clean up the value and the memory associated with it on the remote # worker when no references to it remain. def finalizer(value_ref, executor): executor._dispose(value_ref) # pylint: disable=protected-access weakref.finalize(self, finalizer, value_ref, executor)
Example #10
Source File: compat.py From vistir with ISC License | 6 votes |
def __init__(self, suffix="", prefix=None, dir=None): if "RAM_DISK" in os.environ: import uuid name = uuid.uuid4().hex dir_name = os.path.join(os.environ["RAM_DISK"].strip(), name) os.mkdir(dir_name) self.name = dir_name else: suffix = suffix if suffix else "" if not prefix: self.name = mkdtemp(suffix=suffix, dir=dir) else: self.name = mkdtemp(suffix, prefix, dir) self._finalizer = finalize( self, self._cleanup, self.name, warn_message="Implicitly cleaning up {!r}".format(self), )
Example #11
Source File: test_weakref.py From Fluid-Designer with GNU General Public License v3.0 | 6 votes |
def test_all_freed(self): # we want a weakrefable subclass of weakref.finalize class MyFinalizer(weakref.finalize): pass a = self.A() res = [] def callback(): res.append(123) f = MyFinalizer(a, callback) wr_callback = weakref.ref(callback) wr_f = weakref.ref(f) del callback, f self.assertIsNotNone(wr_callback()) self.assertIsNotNone(wr_f()) del a self._collect_if_necessary() self.assertIsNone(wr_callback()) self.assertIsNone(wr_f()) self.assertEqual(res, [123])
Example #12
Source File: test_weakref.py From Project-New-Reign---Nemesis-Main with GNU General Public License v3.0 | 6 votes |
def run_in_child(cls): def error(): # Create an atexit finalizer from inside a finalizer called # at exit. This should be the next to be run. g1 = weakref.finalize(cls, print, 'g1') print('f3 error') 1/0 # cls should stay alive till atexit callbacks run f1 = weakref.finalize(cls, print, 'f1', _global_var) f2 = weakref.finalize(cls, print, 'f2', _global_var) f3 = weakref.finalize(cls, error) f4 = weakref.finalize(cls, print, 'f4', _global_var) assert f1.atexit == True f2.atexit = False assert f3.atexit == True assert f4.atexit == True
Example #13
Source File: test_weakref.py From Project-New-Reign---Nemesis-Main with GNU General Public License v3.0 | 6 votes |
def test_all_freed(self): # we want a weakrefable subclass of weakref.finalize class MyFinalizer(weakref.finalize): pass a = self.A() res = [] def callback(): res.append(123) f = MyFinalizer(a, callback) wr_callback = weakref.ref(callback) wr_f = weakref.ref(f) del callback, f self.assertIsNotNone(wr_callback()) self.assertIsNotNone(wr_f()) del a self._collect_if_necessary() self.assertIsNone(wr_callback()) self.assertIsNone(wr_f()) self.assertEqual(res, [123])
Example #14
Source File: test_weakref.py From Fluid-Designer with GNU General Public License v3.0 | 6 votes |
def run_in_child(cls): def error(): # Create an atexit finalizer from inside a finalizer called # at exit. This should be the next to be run. g1 = weakref.finalize(cls, print, 'g1') print('f3 error') 1/0 # cls should stay alive till atexit callbacks run f1 = weakref.finalize(cls, print, 'f1', _global_var) f2 = weakref.finalize(cls, print, 'f2', _global_var) f3 = weakref.finalize(cls, error) f4 = weakref.finalize(cls, print, 'f4', _global_var) assert f1.atexit == True f2.atexit = False assert f3.atexit == True assert f4.atexit == True
Example #15
Source File: test_animation.py From wasabi2d with GNU Lesser General Public License v3.0 | 6 votes |
def test_no_linger(self): """Test that deleted animations are garbage-collected""" anim1_alivelist = ['animation 1 alive'] anim2_alivelist = ['animation 2 alive'] obj_alivelist = ['object alive'] # cannot use SimpleNamespace because it doesn't support weakref obj = TestObject() obj.attribute = 0 anim1 = animate(obj, attribute=1, duration=5) anim2 = animate(obj, attribute=2, duration=1) weakref.finalize(anim1, anim1_alivelist.clear) weakref.finalize(anim2, anim2_alivelist.clear) weakref.finalize(obj, obj_alivelist.clear) del anim1 del anim2 del obj gc.collect() self.assertEqual(anim1_alivelist, []) clock.tick(3) gc.collect() self.assertEqual(anim2_alivelist, []) self.assertEqual(obj_alivelist, [])
Example #16
Source File: gst_media.py From linux-show-player with GNU General Public License v3.0 | 6 votes |
def __init__(self): super().__init__() self._state = MediaState.Null self._elements = [] self._old_pipe = '' self._loop_count = 0 self._gst_pipe = Gst.Pipeline() self._gst_state = Gst.State.NULL self._time_query = Gst.Query.new_position(Gst.Format.TIME) bus = self._gst_pipe.get_bus() bus.add_signal_watch() # Use a weakref instead of the method or the object will not be # garbage-collected on_message = weakref.WeakMethod(self.__on_message) handler = bus.connect('message', lambda *args: on_message()(*args)) weakref.finalize(self, self.__finalizer, self._gst_pipe, handler, self._elements) self.changed('loop').connect(self.__prepare_loops) self.changed('pipe').connect(self.__prepare_pipe)
Example #17
Source File: ecs.py From dask-cloudprovider with BSD 3-Clause "New" or "Revised" License | 6 votes |
def _create_cluster(self): if not self._fargate_scheduler or not self._fargate_workers: raise RuntimeError("You must specify a cluster when not using Fargate.") if self._worker_gpu: raise RuntimeError( "It is not possible to use GPUs with Fargate. " "Please provide an existing cluster with GPU instances available. " ) self.cluster_name = dask.config.expand_environment_variables( self._cluster_name_template ) self.cluster_name = self.cluster_name.format(uuid=str(uuid.uuid4())[:10]) async with self._client("ecs") as ecs: response = await ecs.create_cluster( clusterName=self.cluster_name, tags=dict_to_aws(self.tags) ) weakref.finalize(self, self.sync, self._delete_cluster) return response["cluster"]["clusterArn"]
Example #18
Source File: browser.py From MechanicalSoup with MIT License | 6 votes |
def __init__(self, session=None, soup_config={'features': 'lxml'}, requests_adapters=None, raise_on_404=False, user_agent=None): self.raise_on_404 = raise_on_404 self.session = session or requests.Session() if hasattr(weakref, 'finalize'): self._finalize = weakref.finalize(self.session, self.close) else: # pragma: no cover # Python < 3 does not have weakref.finalize, but these # versions accept calling session.close() within __del__ self._finalize = self.close self.set_user_agent(user_agent) if requests_adapters is not None: for adaptee, adapter in requests_adapters.items(): self.session.mount(adaptee, adapter) self.soup_config = soup_config or dict()
Example #19
Source File: _objfinalizer.py From CheckNonceGUI with MIT License | 5 votes |
def finalize(self): """Finalizes the object if not already done.""" self._finalizer()
Example #20
Source File: _objfinalizer.py From ipwndfu with GNU General Public License v3.0 | 5 votes |
def _do_finalize_object_ref(obj_ref): """Helper function for weakref.finalize() that dereferences a weakref to an object and calls its _do_finalize_object() method if the object is still alive. Does nothing otherwise. Returns: None (implicit) Arguments: * obj_ref -- weakref to an object """ obj = obj_ref() if obj is not None: # else object disappeared obj._do_finalize_object()
Example #21
Source File: _objfinalizer.py From CheckNonceGUI with MIT License | 5 votes |
def _do_finalize_object_ref(obj_ref): """Helper function for weakref.finalize() that dereferences a weakref to an object and calls its _do_finalize_object() method if the object is still alive. Does nothing otherwise. Returns: None (implicit) Arguments: * obj_ref -- weakref to an object """ obj = obj_ref() if obj is not None: # else object disappeared obj._do_finalize_object()
Example #22
Source File: _objfinalizer.py From ipwndfu with GNU General Public License v3.0 | 5 votes |
def __del__(self): self.finalize()
Example #23
Source File: app.py From stm32pio with MIT License | 5 votes |
def at_exit(workers_pool: QThreadPool, logging_worker: LoggingWorker, name: str): """ The instance deconstruction handler is meant to be used with weakref.finalize() conforming with the requirement to have no reference to the target object (so it doesn't contain any instance reference and also is decorated as 'staticmethod') """ # Wait forever for all the jobs to complete. Currently, we cannot abort them gracefully workers_pool.waitForDone(msecs=-1) logging_worker.stopped.set() # post the event in the logging worker to inform it... logging_worker.thread.wait() # ...and wait for it to exit, too module_logger.info(f"destroyed {name} ProjectListItem")
Example #24
Source File: _objfinalizer.py From ipwndfu with GNU General Public License v3.0 | 5 votes |
def finalize(self): """Finalizes the object if not already done. Returns: None """ # this is the "public" finalize method raise NotImplementedError( "finalize() must be implemented by AutoFinalizedObject." )
Example #25
Source File: imp.py From schedula with European Union Public License 1.1 | 5 votes |
def finalize(*args, **kwargs): pass
Example #26
Source File: util.py From picrust2 with GNU General Public License v3.0 | 5 votes |
def __init__(self, suffix=None, prefix=None, dir=None): self.name = tempfile.mkdtemp(suffix, prefix, dir) self._finalizer = _weakref.finalize( self, self._cleanup, self.name, warn_message="Implicitly cleaning up {!r}".format(self))
Example #27
Source File: test_weakref.py From Project-New-Reign---Nemesis-Main with GNU General Public License v3.0 | 5 votes |
def test_order(self): a = self.A() res = [] f1 = weakref.finalize(a, res.append, 'f1') f2 = weakref.finalize(a, res.append, 'f2') f3 = weakref.finalize(a, res.append, 'f3') f4 = weakref.finalize(a, res.append, 'f4') f5 = weakref.finalize(a, res.append, 'f5') # make sure finalizers can keep themselves alive del f1, f4 self.assertTrue(f2.alive) self.assertTrue(f3.alive) self.assertTrue(f5.alive) self.assertTrue(f5.detach()) self.assertFalse(f5.alive) f5() # nothing because previously unregistered res.append('A') f3() # => res.append('f3') self.assertFalse(f3.alive) res.append('B') f3() # nothing because previously called res.append('C') del a self._collect_if_necessary() # => res.append('f4') # => res.append('f2') # => res.append('f1') self.assertFalse(f2.alive) res.append('D') f2() # nothing because previously called by gc expected = ['A', 'f3', 'B', 'C', 'f4', 'f2', 'f1', 'D'] self.assertEqual(res, expected)
Example #28
Source File: test_weakref.py From Project-New-Reign---Nemesis-Main with GNU General Public License v3.0 | 5 votes |
def test_finalize(self): def add(x,y,z): res.append(x + y + z) return x + y + z a = self.A() res = [] f = weakref.finalize(a, add, 67, 43, z=89) self.assertEqual(f.alive, True) self.assertEqual(f.peek(), (a, add, (67,43), {'z':89})) self.assertEqual(f(), 199) self.assertEqual(f(), None) self.assertEqual(f(), None) self.assertEqual(f.peek(), None) self.assertEqual(f.detach(), None) self.assertEqual(f.alive, False) self.assertEqual(res, [199]) res = [] f = weakref.finalize(a, add, 67, 43, 89) self.assertEqual(f.peek(), (a, add, (67,43,89), {})) self.assertEqual(f.detach(), (a, add, (67,43,89), {})) self.assertEqual(f(), None) self.assertEqual(f(), None) self.assertEqual(f.peek(), None) self.assertEqual(f.detach(), None) self.assertEqual(f.alive, False) self.assertEqual(res, []) res = [] f = weakref.finalize(a, add, x=67, y=43, z=89) del a self._collect_if_necessary() self.assertEqual(f(), None) self.assertEqual(f(), None) self.assertEqual(f.peek(), None) self.assertEqual(f.detach(), None) self.assertEqual(f.alive, False) self.assertEqual(res, [199])
Example #29
Source File: tempfile.py From Project-New-Reign---Nemesis-Main with GNU General Public License v3.0 | 5 votes |
def __init__(self, suffix=None, prefix=None, dir=None): self.name = mkdtemp(suffix, prefix, dir) self._finalizer = _weakref.finalize( self, self._cleanup, self.name, warn_message="Implicitly cleaning up {!r}".format(self))
Example #30
Source File: _objfinalizer.py From CheckNonceGUI with MIT License | 5 votes |
def finalize(self): """Finalizes the object if not already done.""" self._finalizer()