扭曲的内联回调和远程生成器

2024-04-24 08:49:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我用过defer.inlineCallbacks在我的代码中,我发现阅读和调试比使用addCallbacks要容易得多。在

我正在使用PB,在向客户机返回数据时遇到了一个问题。数据的大小约为18Mb,由于返回的字符串的长度,我得到一个失败的BananaError。在

我想做的是编写一个生成器,这样我就可以继续调用函数,并在每次调用函数时返回一些数据。在

如果已经使用了内联回调,我该怎么写呢?如果我改为返回一个值,这是否可能。下面的工作怎么样?在

@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

Tags: 数据path代码selfreturnresultfilenameversions
1条回答
网友
1楼 · 发布于 2024-04-24 08:49:41

inlineCallbacks修饰的生成器函数返回Deferred-而不是生成器。总是这样。不能从用inlineCallbacks修饰的函数返回生成器。在

请参阅twisted.spread.util中的寻呼机类,了解您可以采用的另一种方法。在

相关问题 更多 >