Я недавно заменил много sycnronous вызовов db.put в приложении app на асинхронные вызовы. Мне не нужно использовать эти данные для остальной части запроса, поэтому изначально я просто вызывал функцию put_async методом «забыл и забыл». Тогда я наткнулся на этот пост на SO:
Appengine: put_async не работает (по крайней мере, на сервере разработки)? , а ответ инженера ядра приложения говорит, что вы должны вызвать wait или get_result для асинхронного объекта, чтобы гарантировать, что он написан.
Таким образом, в моем тестировании все вызовы put_async работали нормально, но я хотел быть уверенным, поэтому я добавил глобальный модуль с переменной, к которой у меня есть доступ ко всем другим модулям, и сохранял асинхронную ссылку каждый раз, когда был сделан вызов put_async в приложении. то есть:
APP_GLOBALS.async_db_calls.append (db.put_async (what_db_model))
Затем я зарегистрировал функцию выключения с помощью atexit, которая перебирает все вызовы asycn для этого запроса и вызывает wait () для них, чтобы гарантировать, что они были записаны в хранилище данных.
Это работает , но я заметил резкое снижение производительности после этого изменения ... Кто-нибудь есть какие-либо идеи по этому поводу, или знаете лучший способ использовать asycncalls для записи без выключения функционировать?