Имеется ли время ожидания у колбы g объекта? - PullRequest
0 голосов
/ 09 января 2019

Я использую 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-объекта?

1 Ответ

0 голосов
/ 09 января 2019

Информация о g будет храниться до тех пор, пока запрос активен.

g ограничен контекстом приложения и будет в памяти до завершения запроса.

Это определенно плохое место для хранения вашей пользовательской информации для очередей задач

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...