в моем приложении i для одного из обработчиков, мне нужно получить группу сущностей и выполнить функцию для каждой из них.
У меня есть ключи всех нужных мне сущностей.после их извлечения мне нужно выполнить 1 или 2 метода экземпляра для каждого из них, и это немного замедляет мое приложение.Выполнение этого для 100 сущностей занимает около 10 секунд, что очень медленно.
Я пытаюсь найти способ получить сущности и выполнять эти функции параллельно, чтобы сэкономить время, но я не совсем уверен, какой путь лучше.
я пробовал _post_get_hook, но у меня есть объект будущего, и мне нужно вызвать get_result () и выполнить функцию в хуке, которая работает нормально в sdk, но получает большую 'максимальную глубину рекурсии, превышеннуюво время вызова Python objec ', но я не могу понять, почему, и сообщение об ошибке не совсем продумано.
- это Pipeline api или ndb.Tasklets, что я ищу?
atm imидти методом проб и ошибок, но я был бы рад, если бы кто-то мог привести меня в правильном направлении.
РЕДАКТИРОВАТЬ
мой код похож на файловую систему, каждая папкасодержит другие папки и файлы.Путь коллекций установлен на другом объекте, поэтому для сериализации объекта коллекции мне нужно получить ссылочный объект и получить путь.В коллекции функция serialized_assets () работает медленнее, чем больше объектов в ней содержится.Если бы я мог выполнить функцию сериализации для каждого содержащегося актива рядом, это бы немного ускорило процесс.
class Index(ndb.Model):
path = ndb.StringProperty()
class Folder(ndb.Model):
label = ndb.StringProperty()
index = ndb.KeyProperty()
# contents is a list of keys of contaied Folders and Files
contents = ndb.StringProperty(repeated=True)
def serialized_assets(self):
assets = ndb.get_multi(self.contents)
serialized_assets = []
for a in assets:
kind = a._get_kind()
assetdict = a.to_dict()
if kind == 'Collection':
assetdict['path'] = asset.path
# other operations ...
elif kind == 'File':
assetdict['another_prop'] = asset.another_property
# ...
serialized_assets.append(assetdict)
return serialized_assets
@property
def path(self):
return self.index.get().path
class File(ndb.Model):
filename = ndb.StringProperty()
# other properties....
@property
def another_property(self):
# compute something here
return computed_property
EDIT2:
@ndb.tasklet
def serialized_assets(self, keys=None):
assets = yield ndb.get_multi_async(keys)
raise ndb.Return([asset.serialized for asset in assets])
- этоэтот код тасклета в порядке?