Python 任务队列和非幂等任务
我正在开发一个投票应用程序,用户可以上传所有选民的电子邮件地址列表。在执行一些错误检查之后,我为每个投票者创建了一个Python 任务队列和非幂等任务,python,google-app-engine,task-queue,idempotent,Python,Google App Engine,Task Queue,Idempotent,我正在开发一个投票应用程序,用户可以上传所有选民的电子邮件地址列表。在执行一些错误检查之后,我为每个投票者创建了一个投票者实体。由于可能有大量投票者,我在taskqueue中创建了投票者实体以避免30秒的限制,任务如下所示: put_list = [] for email, id in itertools.izip(voter_emails, uuids): put_list.append(Voter(election = election,
投票者
实体。由于可能有大量投票者,我在taskqueue中创建了投票者
实体以避免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)
然而,这个任务不是幂等的。有没有办法使这个任务幂等的?或者有更好的方法吗?使用key\u名称而不是uuid属性来防止创建重复的投票者实体。使用key\u名称而不是uuid属性来防止创建重复的投票者实体。我喜欢这个想法,但我关心的是数据存储调用的数量。在上面的代码中,只有一个put。要使用命名键,我想我必须为每个投票者(一个非常大的数字)加上一个put调用get_或_insert。是否可以使用命名键执行批量操作?即使使用键名,您也应该能够使用
put()
,并且新实例将替换旧实例上的所有属性。你到底需要uuid做什么还不清楚。我可能会这样做,比如投票者(parent=election,key\u name=email)
@TokenMacGuy,使用email作为密钥名是个好主意。我需要UUID以防止选民欺诈(UUID发送到选民的电子邮件)。我想我不希望选民与选举处于同一个实体组中,但我想问另一个问题。@MacGuy,实际上我不能将电子邮件用作密钥名称,因为它不能保证唯一(同一封电子邮件可以在两次不同的选举中使用)。我想我可以为选举预先准备一些独特的ID。我喜欢这个想法,但我关心的是数据存储调用的数量。在上面的代码中,只有一个put。要使用命名键,我想我必须为每个投票者(一个非常大的数字)加上一个put调用get_或_insert。是否可以使用命名键执行批量操作?即使使用键名,您也应该能够使用put()
,并且新实例将替换旧实例上的所有属性。你到底需要uuid做什么还不清楚。我可能会这样做,比如投票者(parent=election,key\u name=email)
@TokenMacGuy,使用email作为密钥名是个好主意。我需要UUID以防止选民欺诈(UUID发送到选民的电子邮件)。我想我不希望选民与选举处于同一个实体组中,但我想问另一个问题。@MacGuy,实际上我不能将电子邮件用作密钥名称,因为它不能保证唯一(同一封电子邮件可以在两次不同的选举中使用)。我想我可以为选举准备一些独特的身份证。