2011-07-16 53 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发送给选民的电子邮件)。我认为我不希望选民与选举处于同一个实体组织,但我会就此提出另一个问题。 –