使用Redis作为Flask/Heroku的会话存储需要双重响应

2024-05-29 04:43:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我在Heroku上有一个使用Flask/Redis/Postgres的应用程序,它正在记录用户输入和计数的结果

为了克服Heroku共享资源的不足,我使用一个唯一的用户名&;计数器,并根据需要获取它们

连接

# Redis Connection
HEROKU_REDIS = os.getenv('REDIS_URL')
redis = redis.from_url(HEROKU_REDIS)

# Set User for session
USER = secrets.token_urlsafe(4) # User to store in the session.
redis.set(str(USER), USER) # Set unique user token

# Set Counter for session
COUNTER = 0
counter_id = secrets.token_urlsafe(4) # Short username is fine
redis.set(str(counter_id), COUNTER) # Set unique counter token

然后调用各种函数,并根据需要获取值

设置迭代的值。

if COUNTER == 0:
    generate_image() # generates the first image in the background to match reponse to image.
    COUNTER += 1
    redis.set(str(counter_id), COUNTER) # Set Redis Token
else:
    process_answer(recorded_result) # Answer Function
    write_data()
    generate_image()
    COUNTER += 1
    redis.set(str(counter_id), COUNTER) # Set Redis Token

存储值并推送到数据库。

它存储在全局字典中,在创建新数据时重新生成该字典:

def process_answer(recorded_result):
    global user_data
    user_data = {
        'user': str(redis.get(str(USER))),
        'counter' : int(redis.get(str(counter_id))),
        'correct': 0,
        'near_miss' : 0,
        'recorded_result' : "recorded_result",
    }

。。。然后推到一个分贝

发生了什么:

除了重复两次之外,这一切都非常有效。 如果手表计数器I是1两次,那么是2两次,然后是3两次。 我一辈子都不明白为什么会发生这种事

此处的实时版本:colourdata.org
Git文件here(此文件作为CSV输出,而live不作为CSV输出)

任何关于为什么会发生这种情况的线索都将不胜感激。 screenshot


Tags: imageredistokenidcounterresultsetstr

热门问题