Google AppEngine用のPythonAPIを使用していますが、サーバーが一定時間(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)