2011-07-16 181 views
1

我正在開發一個投票應用程序,用戶可以在其中上傳所有選民的電子郵件地址列表。在做了一些錯誤檢查之後,我爲每個選民創建了一個Voter實體。由於可以有大量的選民,我的任務隊列創建Voter實體,以避免在30秒的限制和任務看起來是這樣的:任務隊列和非冪等任務

put_list = [] 
    for email, id in itertools.izip(voter_emails, uuids): 
     put_list.append(Voter(election = election, 
           email = email, 
           uuid = id)) 
    election.txt_voters = "" 
    put_list.append(election) 
    db.put(put_list) 

這個任務,但是,是不是冪等。有沒有辦法讓這個任務是冪等的?還是有更好的方法來做到這一點?

回答

1

使用key_name而不是uuid屬性來防止創建重複的選舉器實體。

+0

我喜歡這個想法,但我關心數據存儲調用的數量。在上面的代碼中只有一個放。要使用命名密鑰,我想我必須爲每個投票者(一個非常大的數字)加上一個投票者的get_or_insert。是否可以使用命名密鑰進行批量操作? –

+1

即使使用key_name,你也應該能夠使用put(),並且新實例將替換舊的所有屬性。目前還不清楚你需要uuid。我可能會做這樣的事情'Voter(parent = election,key_name = email)' – SingleNegationElimination

+0

@TokenMacGuy,使用電子郵件作爲關鍵名是一個好主意。我需要UUID來防止選民欺詐(UUID發送給選民的電子郵件)。我認爲我不希望選民與選舉處於同一個實體組織,但我會就此提出另一個問題。 –