- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
是否有任何障碍阻止weakref
从做 __del__
所做的所有事情,但有更强的保证(例如,finalize
保证调用将在解释器退出之前进行,并且调用的顺序是明确定义的等)?
似乎在遥远的过去it was thought weakref
最终会导致从语言中删除 __del__
。
是什么阻止了这种情况的发生?
好像有few use cases for __del__
,并且我所知道的所有这些似乎至少与 weakref
回调或 weakref.finalize
一样好(通常更好)。
更新:
与 PEP 442显着改善了 __del__
的行为,以及 @gz 和 @user2357112 提到的对 weakref
的担忧,我想知道该语言是否普遍朝着制作 __del__ 的方向发展
更可靠,或倾向于使用 weakref
而不是 __del__
,或两者兼而有之。
最佳答案
__del__
仍然存在是有某种务实的原因。几个重要的 weakref
改进,包括 finalize
,是 new in Python 3.4 .因此,用更好的弱引用替换 __del__
错过了使用 py3k 进行语言破坏性更改的窗口。
我认为大多数用途可以被基本的weakref功能所取代,但我对Richard Oudkerk 在issue 15528 中的观察感到震惊。 finalize
提出和实现的地方:
[Weakref callbacks] are low level, and working out how to use them correctly requires a bit of head scratching. One must find somewhere to store the weakref till after the referent is dead, and without accidentally keeping the referent alive. Then one must ensure that the callback frees the weakref (without leaving any remnant ref-cycles).
When it is an option, using a
__del__
method is far less hassle.
无论如何,在考虑 Python 4 时,也许应该再次提出这个问题? ;)
关于python - `weakref` 回调可以替换 `__del__` 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43758886/
来自 documentation : Weakref.proxy returns a proxy to object which uses a weak reference. But if I run
我正在查看 Ruby WeakRef,似乎 API 的编写方式具有隐含的竞争条件,尽管它似乎不太可能命中。 API 隐含的基本用法是: obj = Object.new foo = WeakRef.n
我通过以下方式使用 Py2neo 创建关系: article = graph.merge_one("Article", "id", aid) article2 = graph.merge_one("A
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: Why doesn't the weakref work on this bound method? 我在观
我尝试在我的类上使用弱引用,我在其中使用插槽来节省一些内存,但我无法创建派生类。 class A(object): __slots__ = ['__weakref__'] class B(A)
我有两个类:父类和容器类。父类实例有匹配的容器类实例作为弱引用。 深度复制父实例时出现问题,weakref 仍然链接到原始实例。这是一个最小的例子: import weakref from copy
我知道在 Python 中我可以做如下的事情: from weakref import ref class A(object): def __init__(self, parent):
我想允许重新定义已在头文件中定义的 .c 文件中的函数。根据关于 weakref 属性的 GCC 手册: The effect is equivalent to moving all referenc
我在玩 ruby 终结器时发现了一些对我来说很奇怪的行为。我可以将触发代码减少为以下内容: require "weakref" class Foo def initialize
我想删除索引在列表["A", "C"]中的行。 例子: import pandas as pd df_test = pd.DataFrame({"Col": [1,2,3,4]}, index=["A
这里的多处理相当新。我有一个运行两个进程的代码。一种是不断地从服务器接收数据块并将其放入队列中,另一种是从队列中取出数据块并对其进行处理。 下面是我的客户端代码: import socket impo
我有一个类(我不控制)没有实现自己的清理。我认为这是 weakref.finalize 适用的情况之一,但我无法让它工作。 def cleanup(obj): print('Cleanup o
有没有比以下更好的方法: def create_expired_weakref(): class Tmp: pass ref = weakref.ref(Tmp()) asse
在 Python 中,有没有办法在对象完成后调用函数? 我认为 weakref 中的回调会执行此操作,但似乎一旦对象被垃圾回收,但在调用对象 __del__ 方法之前调用 weakref 的回调。这似
我想知道使用 WeakRef 的开销是多少?处理大数据集? 我要执行的任务是这样的: huge = get_array_of_weak_refs # 100000000 entries or more
是否有任何障碍阻止weakref从做 __del__ 所做的所有事情,但有更强的保证(例如,finalize 保证调用将在解释器退出之前进行,并且调用的顺序是明确定义的等)? 似乎在遥远的过去it w
我遇到过这个 WeakRef polyfill:ungap / weakrefs . 我很难理解它是如何工作的,尤其是第 11-14 行: var wr = new WeakMap; function
我想同时训练多个神经网络,我正在尝试使用 multiprocessing 模块,以便每个网络都可以在单独的过程中进行训练,但我遇到了一个问题.当我运行下面的演示代码时(由于 apply_async 函
在尝试使用 WeakReferences 的一些示例时,我遇到了以下情况。我正在创建一个 hashmap 并用 Employee 对象的弱引用填充它。现在我有两个强引用, employee 和 w
使用 Boost.Python,有没有办法调用通过 weakref 传递的 Python 函数?以下代码不起作用: import weakref def foo(): print 'it wo
我是一名优秀的程序员,十分优秀!