我正在使用用于 Google App Engine 的 python API,我想要做的是从服务器加载一个文件列表,如果它已经超过一个时间间隔(例如 1 小时)。
为此,我尝试将执行的最后一个操作时间存储到一个文件中,并在下次读取它以了解与下一个请求的当前执行时间的区别,但后来我发现 GAE 不允许将文件写入磁盘,所以我不得不使用 blobstore。我试图将我已经拥有但使用 blobstore 函数的相同函数组合在一起,但即使创建了文件,每次我尝试读取它时都会收到错误消息:
FinalizationError: ApplicationError: 101 Blobkey not found.
我不确定我在做什么是错的。我对 GAE 很陌生,不知道这是否是完成我需要做的事情的最佳方法,而且我在 GAE 的文档中找不到在同一脚本中读写文件的示例文件 API。
提前感谢您能给我的任何提示。
这是我的代码的摘要版本,get 和 set 函数与代码中的一样:
# imports...
from datetime import datetime as time
from google.appengine.api import files
# create file
last_request_file = files.blobstore.create()
def update_list(time_interval):
# Get the time of the current request
current_time = time.now()
# Calculate timelapse between this an the last request
last_request = get_last_request_time(last_request_file)
elapsed_time = current_time - last_request
# If more than an interval update proxy list
if elapsed_time.total_seconds() >= time_interval:
# Request new list from the server
my_list = getList()
# Update last_request time
set_last_request(last_request_file)
return my_ist
def get_last_request_time(file_name):
request_time = None
with files.open(file_name, 'r') as f:
text_time = f.read()
if text_time:
request_time = time.strptime(text_time, '%Y-%m-%d %H:%M:%S')
else: # file was empty
request_time = time.min
# Finalize to close the file.
files.finalize(file_name)
return request_time
def set_last_request_time(file_name):
current_time = time.now()
# Open the file and write to it
with files.open(file_name, 'a') as f:
f.write(time.strftime(current_time, '%Y-%m-%d %H:%M:%S')+'\n')
# Finalize to close the file.
files.finalize(file_name)