Я использовал defer.inlineCallbacks в своем коде, так как считаю, что его намного легче читать и отлаживать, чем использовать addCallbacks.
Я использую PB, и у меня возникла проблема при возврате данных клиенту. Размер данных составляет около 18 МБ, и я получаю ошибку 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