装饰器的意义是什么
@reactor.callWhenRunning,
@results_deferred.addCallback
@results_deferred.addErrback.
还有什么是延迟字符串,例如在
twisted.internet.utils.getProcessOutput()
返回延迟字符串这里到底发生了什么?
我是 twisted 的新手,因此这可能是一个非常简单的问题,但阅读 twisted 文档对我帮助不大
最佳答案
在正常的编程实践中你会这样做
db = Database.connect()
result = db.getResult()
processResult(result)
现在,根据您的数据库和网络,这 3 个语句可能需要一毫秒到几秒不等。
几十年来,我们一直采用这种方式进行编程,在大多数情况下,我们可以接受“等待”。
但有时您的程序不能只等待结果。你会开始想,哎呀,在等待结果的同时我可以做很多其他事情。也许打印一个输出,或者处理一个函数,或者只是快速检查套接字等等。
输入 Twisted 和 Deferred。
无需等待结果
,在 Twisted 中,当调用特殊方法时,您将获得 Deferred
。您将向此延迟添加一个回调函数,这意味着,当您有结果/答案时调用此函数。
deferredResult = db.nonBlockingGetResult()
deferredResult.addCallback(processOutput)
一旦执行了第一个语句,它就会返回“something”。那个东西是 Deferred
。那里没有阻塞,没有等待。并向此 Deferred
添加回调 processOutput
,它在 deferred 被“触发”时调用 - 即 result
已准备就绪。
HTH
关于Python 扭曲的 Reactor 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2433616/