2010-09-16 28 views
2

我打算使用GAE的TaskQueue API來刷新我保存在數據存儲(和memcache,但Datastore更可靠)中的HTML頁面緩存。如何才能訪問GAE上的任務列表?

每週一次,我添加/編輯一些數據,並需要重新生成關聯的HTML頁面,觸發任務是一種方式。

請注意,不同的編輯可能意味着更改相同的緩存頁面。例如,該主頁有來自不同數據的幾個部分的片段。我想要的是以延遲(例如使用倒計時一小時)向任務隊列啓動任務,以便可以累積多次編輯,最終,緩存頁面只會重新生成一次。

問題是,如果已經有一個任務排隊等待在一小時內重新生成頁面X,則不需要添加任務以重新生成頁面X.因此,我需要檢查任務列表,看看是否已經有一個。

如何訪問任務列表?

回答

2

我看到,添加相同的任務將引發一個DuplicateTaskNameError,也許這就是我所需要的。

+1

正確 - 這是任務名稱的用途。請注意,如果任務已經運行,您還需要捕獲TombstonedTaskNameError。 – 2010-09-16 14:35:14

0

無論何時進行編輯,您都可以簡單地從緩存中刪除項目。然後,當有人來讀取頁面時,您會注意到它不在緩存中,並從該數據存儲中獲取該緩存,並使用新近檢索的數據更新緩存。無論如何,您應該已經擁有這種邏輯,因爲您無法始終保證該項目在緩存中。這會影響更新後的第一次抓取的速度,但在此之後它會沒事的。

+0

首先,有些頁面很難生成,有時會通過30秒的截止日期,因此最好將它們呈現爲離線。其次,我可以使用TaskQueue上的字節配額來確保我的緩存始終保持新鮮。但是,是的,這是默認行爲。 – 2010-09-17 08:15:17