3

Python で App Engine を使用しています。ユーザーの画像を保存するために、 Google ドキュメントに示されているようにブロブストアに直接書き込みます。

私のコードは以下の通りです:

# Image insertion in the blobstore
file_name = files.blobstore.create(mime_type='image/jpeg')
with files.open(file_name, 'a') as f:
    f.write(self.imageContent)
files.finalize(file_name)
self.blobKey = files.blobstore.get_blob_key(file_name)
logging.info("Blobkey: "+str(self.blobKey))

問題は不安定です。私は何も変えていません。昨日から時々うまくいくこともあります。なんで?ブロブキー (コードの最後の行) を出力すると、画像がブロブストアに保存されているかどうかを確認できます。

動作すると、次の行が表示されます。

Blobkey: AMIfv94p1cFdqkZa3AhZUF2Tf76szVEwpGgwOpN...

機能しない場合、ログに次のように記録されます。

Blobkey: None

最後の詳細: 画像 (self.imageContent) は、各書き込みの前に前処理され、.JPEG に変換されます。

編集:
毎回、画像はブロブストアに保存されます (管理コンソールのブロブビューアーで見ることができます)。つまり、誤動作している get_blob_key 関数です...

このような状況で私は何をすべきか知りたいですか?App Engine の動作を不安定にする何か間違ったことをしていますか? どうすればこれを解決できますか?

4

1 に答える 1

3

50ミリ秒間隔でスレッドをスリープさせることで、最終的にこの問題を解決することができました

これは私が追加したコードです:

# Sometimes blobKey is None
self.blobKey = files.blobstore.get_blob_key(file_name)

# We have to make it wait til it works!
for i in range(1,3):
    if(self.blobKey):
         break
    else:
        logging.info("blobKey is still None")
        time.sleep(0.05)
        self.blobKey = files.blobstore.get_blob_key(file_name)

logging.info("Blobkey: "+str(self.blobKey))

もちろん、time モジュールをインポートして機能させる必要があります。

import time

systempuntoout が言及した Issue 4872 の人物とほとんど同じことをしました。

ありがとう。任意の提案を追加してください。

于 2011-07-01T16:11:18.597 に答える