Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 任务队列和非幂等任务_Python_Google App Engine_Task Queue_Idempotent - Fatal编程技术网

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,实际上我不能将电子邮件用作密钥名称,因为它不能保证唯一(同一封电子邮件可以在两次不同的选举中使用)。我想我可以为选举准备一些独特的身份证。