Would fixing this help? https://bugs.python.org/issue44140
On Tue, 20 Jul 2021, 02:16 Sebastian Berg, <sebast...@sipsolutions.net> wrote: > On Mon, 2021-07-19 at 22:24 +0000, Mark Gordon wrote: > > Proposal: > > > > Have a weakref.link (not at all attached to the naming) primitive > > that allows one to keep object A alive while object B is alive. This > > would be functionally similar to adding A as an attribute of B from > > the GC's perspective without making any assumptions about what > > attributes are available in B. Here's a really course example of how > > this might be used: > > > > Probably, the "stake holders" on this list are well aware. But, as far > as I understand, this is (or requires) an "Ephemeron": > > https://en.wikipedia.org/wiki/Ephemeron > > While I might be tempted to try/use it if Python had it (and was > available from C), I doubt that it actually matters in practice, for my > "use case". > > > The "use case", why I was curious about it is for multiple-dispatching > (to allow users to extend NumPy). > If you dispatch based on input types and the input type can be deleted, > the same problem arises: The (type specific) implementation is > expected to – and sometimes must – hold a strong reference to the input > types. Thus creating an unbreakable circle. > > (You can avoid this sometimes, but I don't think you can in general) > > An Ephemeron should be able to describe this correctly. I expect even a > situation like: > > func(A, B) -> (A, B, C) > > which can be deleted if either `A` or `B` is "almost collectable", but > must keep alive `C` if both `A` and `B` are alive. > > Cheers, > > Sebastian > > > > # Associate "extra_data" with "obj" where "extra_data" will lose its > > reference when "obj" is no longer reachable through strong refs. > > my_link = weakref.link(obj, extra_data) > > > > ... > > > > obj, extra_data = my_link() > > if obj is not None: > > do_something(obj, extra_data) > > > > > > This would also allow us to fix or create a new version of > > WeakKeyDictionary where values can have strong references back to > > their key without preventing their key from being reclaimed. This has > > been an issue for tensorflow in the past (see > > https://github.com/tensorflow/tensorflow/issues/42022) and is likely > > to be a subtle issue in many more libraries. Even the suggested use > > case in the docs "This can be especially useful with objects that > > override attribute accesses." is likely to be broken because of this > > issue. While I'd be weary of changing the semantics of an existing > > data structure it seems highly unlikely anything depends on this > > behavior since it makes WeakKeyDictionary degrade to behaving like a > > normal dictionary for that key. > > > > > > Notes: > > * Not attached to this specific approach or API > > * Mostly interesting in updating/creating new WeakKeyDictionary as > > mentioned > > _______________________________________________ > > Python-ideas mailing list -- python-ideas@python.org > > To unsubscribe send an email to python-ideas-le...@python.org > > https://mail.python.org/mailman3/lists/python-ideas.python.org/ > > Message archived at > > > https://mail.python.org/archives/list/python-ideas@python.org/message/4KBLRV7QYS36NVJNKAJIDCFTH4DF5YSY/ > > Code of Conduct: http://python.org/psf/codeofconduct/ > > > > _______________________________________________ > Python-ideas mailing list -- python-ideas@python.org > To unsubscribe send an email to python-ideas-le...@python.org > https://mail.python.org/mailman3/lists/python-ideas.python.org/ > Message archived at > https://mail.python.org/archives/list/python-ideas@python.org/message/7C7EVG5ALBP266T6FROR6L7IK4GULPIS/ > Code of Conduct: http://python.org/psf/codeofconduct/ >
_______________________________________________ Python-ideas mailing list -- python-ideas@python.org To unsubscribe send an email to python-ideas-le...@python.org https://mail.python.org/mailman3/lists/python-ideas.python.org/ Message archived at https://mail.python.org/archives/list/python-ideas@python.org/message/AOFYS2KTGVEZJ2WFY7BOEUZIK2QGMJKY/ Code of Conduct: http://python.org/psf/codeofconduct/