我用过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
用
inlineCallbacks
修饰的生成器函数返回Deferred
-而不是生成器。总是这样。不能从用inlineCallbacks
修饰的函数返回生成器。在请参阅
twisted.spread.util
中的寻呼机类,了解您可以采用的另一种方法。在相关问题 更多 >
编程相关推荐