Я использую Flask в сочетании с Huey для обработки долгосрочных задач вне контекста.
Таким образом, по сути, контекст колбы запускается одним из потребителей Huey (рабочий процесс), и он выполняет большую работу, которая занимает некоторое время.
В этом процессе я использую глобальный объект g для Flask для хранения пользователя.
@staticmethod
def CurrentUser():
if g:
if hasattr(g, 'usr'):
user = g.usr
else:
# no user is linked to g yet - see if we can find and load one by searching for a UUID in the cookies
user = UserStateManager.LoadUserState()
g.usr = user
else:
# no g object - maybe we are running outside of the flask context - use a default user
user = UserStateManager.DefaultUserstate()
return user
Проблема в том, что примерно через 20 минут объект g.usr внезапно исчезает. Это трудная для отладки проблема, потому что код в этот момент выполняется рабочим задачи Huey, и я не могу запустить это в IDE. (Ну, я могу , но контекст другой, поэтому ситуация другая).
Я вижу, что все начинается нормально, потому что он записывает записи в базу данных, которые содержат идентификатор пользователя, но примерно через двадцать минут поля идентификатора пользователя внезапно становятся пустыми. Казалось бы, g-объект где-то очищен.
Так что мой вопрос: знает ли кто-нибудь, что может вызвать исчезновение данных usr в g-объекте. Есть ли тайм-аут или какая-то форма сборки мусора для g-объекта?