У меня есть метод POST
, который вызывает несколько тарелок. Эти цепочки имеют урожайность в них, и у меня есть код x.put_async()
в моем коде. Поэтому я не хочу, чтобы он возвращался, прежде чем все асинхронные вещи будут сделаны. Поэтому я украсил все мои талисманы, которые представляют собой небольшие функции с @ndb.tasklet
. Кроме того, поверх моего метода POST
у меня есть:
@ndb.toplevel
def post(self):
Однако в документации говорится:
Но если метод обработчика использует выход, этот метод все еще должен быть завернутый в другой декоратор, @ndb.synctasklet; в противном случае прекратите выполнение с выходом и не закончите.
Действительно, мой метод имеет выход. Он уже завернут в @ndb.tasklet. Я заменяю это на @ndb.synctasklet или я использую оба (если так, как бы я использовал оба)?
Также см. этот поток, который имеет некоторое значение. Я тоже заметил проблему, когда мой запрос возвращался без вывода, но не воспроизводится. Это происходит каждые 15 минут постоянного использования. У меня был только app = ndb.toplevel(webapp2.WSGIApplication([..])
, но теперь я добавил @ndb.toplevel
в основные методы POST
, но проблема все еще сохраняется.
Должен ли я помещать @ndb.tasklet
поверх методов, которые имеют только put_async()
тоже? (Должен ли я помещать его поверх каждого метода, чтобы быть в безопасности? Каковы недостатки этого?)