Использование торнадо, я хочу создать небольшую магию промежуточного слоя, которая гарантирует, что мои сеансы SQLAlchemy будут правильно закрыты/очищены, чтобы объекты не делились с одного запроса на другой. Хитрость заключается в том, что, поскольку некоторые из моих обработчиков торнадо асинхронны, я не могу просто поделиться одним сеансом для каждого запроса.SQLAlchemy + Tornado: Как создать scopefunc для ScopedSession SQLAlchemy?
Итак, я остаюсь при попытке создать ScopedSession, который знает, как создать новый сеанс для каждого запроса. Все, что мне нужно сделать, это определить scopefunc для моего кода, который может превратить текущий исполняемый запрос в уникальный ключ какого-то рода, однако я не могу понять, как получить текущий запрос в любой момент времени (за пределами области текущего RequestHandler, к которой у моей функции нет доступа).
Есть ли что-то, что я могу сделать, чтобы сделать эту работу?
Я вообще не знаю торнадо, но вы можете связать сеанс с самим запросом (т. Е. Не использовать scopedsession, если это не удобно). то вы можете просто сказать request.session. Все еще нужно иметь крючки в начале/конце для установки/срыва. – zzzeek
@zzzeek Если вы опубликуете это как ответ, я помету его как правильно! Чем больше я думал об этом, тем больше я понял, что вы правы - это самый быстрый и простой способ понять, что мне нужно. Благодаря! –
Я тоже думал, что сеанс, созданный с помощью scopped_session между всеми обработчиками async, создаст несогласованность, не так ли? Скажем в одном обработчике, я могу вызвать scopped_session.remove() в конце обработчика, но другой обработчик (который работает асинхронно) может все еще использовать его! – giga