2

私は、GAEの制限を超えるフォームからアップロードされたいくつかの大きな(<100 MB)XMLファイルを処理する必要があるGoogle App Engineアプリに取り組んでいます-ファイルのアップロードに30秒以上かかるか、 10MBのリクエストサイズ。

私が想定している現在の解決策は、ファイルをblobstoreにアップロードしてから、解析のためにアプリケーションに(一度に1 MBずつ)取り込むことです。これは、リクエストの30秒の制限をはるかに超える可能性もあるため、30秒のバーストでタスクキューを介して処理しなければならない可能性があるため、大きなXMLドキュメントをチャンクで処理するための優れた方法があるかどうか疑問に思います。

私は現在、プロジェクトの他の部分にBeautifulSoupを使用しており、ミニダムから切り替えています。GAEでうまく機能するチャンクでデータを処理する方法はありますか?

4

4 に答える 4

2

30 秒の制限はコードの実行時間に適用され、コードはユーザー リクエスト全体が受信されるまで実行を開始しないため、ユーザーがファイルをアップロードするのにかかる時間は関係ありません。

とはいえ、blobstore を使用するのが最良のアイデアのように思えます。ブロブストア アクセスでファイルをエミュレートするBlobReaderを使用して、ブロブを他のファイルと同様に扱い、標準ライブラリ (BeautifulSoup など) を使用して読み取ることができます。ただし、XML ファイルが十分に大きい場合は、メモリが不足するリスクがあるため、ファイル全体をメモリに保持する必要のない SAX ベースのアプローチを検討することをお勧めします。

ファイルの処理に実行時間の制限がある限り、制限が 10 分であるタスク キューでこれを行うことはほぼ確実であり、ユーザーを待たせることはありません。

于 2010-12-23T23:04:27.503 に答える
1

PullDomでは、XML ドキュメントの一部のみを読み込むことができます。残念ながら、公式の Python ドキュメントはかなりまばらです。詳細については、こちらこちらをご覧ください。

于 2010-12-23T21:26:53.380 に答える
0

これは、すべてが同じように見えるPythonの魔法のおかげで、pulldomを使用すると非常に簡単でした。次のように、アプリエンジンから返されたBLOBリーダーを解析するだけです。

blob_reader = blobstore.BlobReader(blob_info.key())
events = pulldom.parse(blob_reader)

それは私がPythonで一番好きなことです、あなたは何かを試してみて、それは通常うまくいきます。

于 2011-06-10T17:09:11.533 に答える
0

App Engine はこのプロジェクトに適したプラットフォームではないようです。

于 2010-12-23T22:28:22.890 に答える