gpt4 book ai didi

python - 使用内联回调

转载 作者:太空狗 更新时间:2023-10-29 20:56:39 26 4
gpt4 key购买 nike

我是 Twisted 的新手,我正在尝试编写一个简单的资源显示数据库中的名称列表,这是我的代码的一部分:

#code from my ContactResource class
def render_GET(self, request):
def print_contacts(contacts, request):
for c in contacts:
request.write(c.name)
if not request.finished:
request.finish()
d = Contact.find() #Contact is a Twistar DBObject subclass
d.addCallback(print_contacts, request)
return NOT_DONE_YET

我的问题是:如何更改此方法以使用 inlineCallbacks 装饰器?

最佳答案

render_GET 方法可能不会返回 Deferred。它可能只返回一个字符串或 NOT_DONE_YET。任何用 inlineCallbacks 修饰的方法都会返回一个 Deferred。因此,您不能使用 inlineCallbacks 修饰 render_GET

当然,没有什么能阻止您在 render_GET 中调用您想要的任何其他函数,包括返回 Deferred 的函数。只需丢弃 Deferred 而不是从 render_GET 返回它(当然,确保 Deferred 永远不会因失败而触发,或者通过抛出它远离你可能会错过一些错误报告......)。

所以,例如:

@inlineCallbacks
def _renderContacts(self, request):
contacts = yield Contact.find()
for c in contacts:
request.write(c.name)
if not request.finished:
request.finish()


def render_GET(self, request):
self._renderContacts(request)
return NOT_DONE_YET

我建议至少看一下 txyogaklein如果您打算使用 Twisted 进行任何严肃的 Web 开发。即使您不想使用它们,它们也应该为您提供一些关于如何构建代码和完成各种常见任务的好主意。

关于python - 使用内联回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14712752/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com