Dea*_*123 5 python twisted perspective-broker
我在我的代码中使用了defer.inlineCallbacks,因为我发现它比使用addCallbacks更容易阅读和调试.
我正在使用PB,我在将数据返回给客户端时遇到了问题.数据大小约为18Mb,由于返回的字符串长度,我得到一个失败的BananaError.
我想要做的是编写一个生成器,这样我就可以继续调用函数并在每次调用函数时返回一些数据.
如何使用已经使用的inlineCallbacks来编写它?它实际上是否可能,如果我返回一个值.会有类似下面的工作吗?
@defer.inlineCallbacks
def getLatestVersions(self):
returnlist = []
try:
latest_versions = yield self.cur.runQuery("""SELECT id, filename,path,attributes ,MAX(version) ,deleted ,snapshot , modified, size, hash,
chunk_table, added, isDir, isSymlink, enchash from files group by filename, path""")
except:
logger.exception("problem querying latest versions")
for result in latest_versions:
returnlist.append(result)
if len(return_list) >= 10:
yield return_list
returnlist = []
yield returnlist
Run Code Online (Sandbox Code Playgroud)
一个生成器函数装饰有inlineCallbacks返回a Deferred- 而不是生成器.情况总是如此.你永远不能从装饰的函数返回一个生成器inlineCallbacks.
有关您可以采取的其他方法的建议,请参阅寻呼机课程twisted.spread.util.