2

「GoogleAppEngineを使用したデータパイプライン」のビデオ/PDFで、ブレットはタスク名に「now / 30」を入れて、後で理由を説明することに注意しましたが、どういうわけか彼は決して説明しません。:)
http://www.youtube.com/watch?v=zSDC_TU7rtc#t=41m35

task_name = '%s-%d-%d' % (sum_name, int(now / 30), index)

その理由について何か考えがありますか?タスク名を再利用できない7日間とは関係がありますか?

セッションページへのリンク

4

1 に答える 1

3

ブレット・スラトキン自身の説明

[ブレット]
やあ、みんな

タスク名のint(time.time()/ 30)の部分は、キューのストールを防ぐためのものです。memcacheが削除されると、作業インデックスカウンターはゼロにリセットされます。つまり、新しいフォーク結合作業項目は、すでに挿入されているタスクと同じ名前のタスクを挿入する可能性があります。タスク名に最大30秒の時間枠を含めることにより、この問題が約30秒間しか持続しないようにします。これが、TombstonedTaskError例外が発生したときに例外を発生させる必要がある理由でもあります。

クロックが不安定な場合の最悪のシナリオは、ファンイン作業を実行するために1つではなく、2つのタスクが実行されることです。これは、多くの場合、許容できるトレードオフであり、タスクキューAPIを使用する場合の基本的な可能性です。これは、マテリアライズドビューの例で使用しているように、ピジョンホール確認エンティティを使用して軽減できます。

お役に立てば幸いです、
[/ Brett]

于 2010-06-07T21:27:26.130 に答える