我在heroku上有一个使用flask/redis/postgres的应用程序,它记录用户输入和计数的结果。
为了克服heroku共享资源的不足,我使用一个惟一的用户名和计数器将重要的变量推送到redis,并根据需要获取它们。
连接
# 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 2 3 2。我一辈子都不明白为什么会这样。
现场版本:colordata.org
git文件在这里(这是csv输出,而不是live)。
任何关于为什么会发生这种情况的线索都将不胜感激。
暂无答案!
目前还没有任何答案,快来回答吧!