【问题标题】:How to fire a deferred in Twisted?如何在 Twisted 中解雇 deferred?
【发布时间】:2013-06-06 12:37:24
【问题描述】:

我正在使用twisted。我对使用延迟对象有点困惑。 我在这个延迟中看到了正确的结果,但我无法使用它。

例如

def hello(defer):
    print(defer)

打印一下我

延迟到 0x24dv5f5 当前结果:44

如何访问此结果?

更新

这是我尝试触发延迟的代码

    def handleLoginFailed(self, sid, args):
        d = defer.Deferred()
        d.callback(sid)

        def writeLoginFailed(sid, args):
            print("sid:", sid)
            self.simpleQuery(
                """
                INSERT INTO auth
                    (session, success, username, password, timestamp)
                VALUES (%s, %s, %s, %s, FROM_UNIXTIME(%s))
                """,
                (sid, 0, args['username'],
                    args['password'], self.nowUnix()))
        d.addCallback(writeLoginFailed(sid, args))

【问题讨论】:

    标签: python twisted deferred


    【解决方案1】:
    d = Deferred()
    d.callback("the result")
    
    def handleTheResult(result):
        print "The Deferred fired, its result is:", result
    d.addCallback(handleTheResult)
    

    【讨论】:

    • documentation 表示callback(self, result),表示result 是第二个参数。但是,相同的文档无法解释 self,因此必须怀疑有什么不对劲。
    • 如果您不理解“self”在该上下文中的含义,您需要对 Python 语法进行基本的复习,而不是 Twisted。 docs.python.org/2/tutorial/classes.html#random-remarks
    • 我不知道为什么,但这不起作用。我将粘贴我的代码。看更新
    • 它不起作用,因为你在 调用 writeLoginFailed,而不是传递 writeLoginFailed。您需要将代码更改为 d.addCallback(writeLoginFailed, args)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-08
    相关资源
    最近更新 更多