延迟的库允许打包的函数访问多少信息?

我知道如果我延迟一个函数并向其传递一些args,则该函数具有这些args并可以与它们一起使用,但是属于实例对象的函数(例如)可以访问其对象的变量吗?

class foo (object):
    def __init__ (self):
        self.bar = 42
    def do_work (self):
        self.bar += 1

baz = foo()
deferred.defer(baz.do_work)

我是否基本上必须向函数提供参数所需的所有信息?
另外,如果对baz的唯一引用是在延迟函数中,是否会对其进行废弃处理?

解决方法:

如果您传递一个实例方法,就像您在代码示例中一样,则整个实例将被序列化并传递.您的foo对象所引用的任何对象也将被序列化,依此类推.任何全局状态(例如,模块级别和类级别的变量)都不会保留,因此这些变量在执行任务的实例上处于任何状态.

在调用defer时,必要的数据被序列化并发送到任务队列,因此,如果这是您对baz的唯一引用,则将立即垃圾回收baz的副本.但是,这不会阻止延迟的任务运行,因为它将在反序列化并执行任务时创建一个新实例.

上一篇:PHP:是否可以访问像这样的静态方法:Object :: ChildObject :: method()?


下一篇:python:表示环绕自身的方形网格(圆柱体)