Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/326.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.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 填充Google应用程序引擎应用程序';具有20.000个字符串的s数据存储_Python_Google App Engine_Google Cloud Datastore - Fatal编程技术网

Python 填充Google应用程序引擎应用程序';具有20.000个字符串的s数据存储

Python 填充Google应用程序引擎应用程序';具有20.000个字符串的s数据存储,python,google-app-engine,google-cloud-datastore,Python,Google App Engine,Google Cloud Datastore,在appspot中尝试之前,我正在尝试在本地数据存储中创建并存储20000个随机代码。。。这就是模型 class PromotionCode (db.Model): code = db.StringProperty(required=True) 这是处理填充请求的类(只有登录的管理员才能使用它)。它创建随机字母数字代码,并尝试将其中20000个存储在数据存储中: class Populate(webapp.RequestHandler): def GenerateCode(self)

在appspot中尝试之前,我正在尝试在本地数据存储中创建并存储20000个随机代码。。。这就是模型

class PromotionCode (db.Model):
  code = db.StringProperty(required=True)
这是处理填充请求的类(只有登录的管理员才能使用它)。它创建随机字母数字代码,并尝试将其中20000个存储在数据存储中:

class Populate(webapp.RequestHandler):

  def GenerateCode(self):
    chars = string.letters + string.digits
    code = ""
    for i in range(8):
      code = code + choice(chars)
    return code.upper()

  def get(self):
    codes = "";
    code_list = []
    for i in range(20000):
      new_code = self.GenerateCode()
      promotion_code = PromotionCode(code=new_code)
      code_list.append(promotion_code)
      codes = codes + "<br>" + new_code
    db.put(code_list)
    self.response.out.write("populating datastore...<br>")
    self.response.out.write(codes)
类填充(webapp.RequestHandler):
def生成代码(自身):
字符=string.letters+string.digits
code=“”
对于范围(8)中的i:
代码=代码+选项(字符)
返回代码.upper()
def get(自我):
代码=”;
代码列表=[]
对于范围内的i(20000):
新代码=self.GenerateCode()
促销代码=促销代码(代码=新的促销代码)
代码列表。附加(促销代码)
代码=代码+“
”+新代码 db.put(代码列表) self.response.out.write(“填充数据存储…
”) self.response.out.write(代码)
我想我可以尝试批处理所有这些put(),所以我创建了一个代码列表(code\u list)。本地操作需要2-5分钟


有没有可能不用bulkuploader选项就能更快地完成?因为很明显,我得到了500服务器错误。或者在连续的电话或步骤中进行

您可以在任务队列中批处理流程吗

正在将批处理大小设置为任务队列中的高值


你可以更快地归档它

为什么不将上面的代码更改为一次插入100个,然后运行如下操作:

for i in {1..200}
  do
    curl --cookie "ACSID=your-acsid-cookie" http://your-app-id.appspot.com/populatepath
    sleep(5)
  done
从你的命令行?这些条目是随机的,你不需要记住任何状态

您可以通过手动登录并从浏览器检查cookie来获取ACSID cookie

请求之间的休眠将阻止您旋转大量实例或达到短期配额


如果这是您需要自动执行的任务,那么任务队列建议很好,但是如果它是一次性的,您最好保持简单。

我不明白为什么您必须提前创建20000个任务队列,而不是动态创建每个任务队列,但我打赌您可以大大加快代码的速度。类似这样(未经测试):

类填充(webapp.RequestHandler):
chars=“AB…Z01…9”
def生成代码(自身):
返回“”。加入(xrange(8)中uu的选择(字符))
def get(自我):
代码列表=[]
对于范围内的i(20000):
新代码=self.GenerateCode()
促销代码=促销代码(代码=新的促销代码)
代码列表。附加(促销代码)
db.put(代码列表)
self.response.out.write(“填充数据存储…
”) self.response.out.write(“完成”)
不打印代码可以节省时间


我相信这里的其他人可以做得更好…

如果您的任务无法在30秒的请求截止时间内完成,您可以将其分成多个块(这应该很容易,因为他们都在做相同的事情),并在任务队列中的任务中运行它们。无论如何,您都应该在那里完成所有的工作,这样您就不会强迫用户在返回响应之前等待它完成


不过,和Jeff一样,我也不明白为什么您希望提前生成20000个这样的代码,而不是在需要时生成它们。

我可以尝试多次插入,比如1000个步骤,每个步骤20个代码,在它们之间添加一个线程。sleep(睡眠时间)。这有意义吗?不需要饼干!它适用于您的第一个更简单的脚本(不过,这个脚本要复杂得多)。我想我会坚持这个解决方案,直到找到更好的。如果它存在。。。
class Populate(webapp.RequestHandler):

  chars = "AB...Z01...9"

  def GenerateCode(self):
    return ''.join(choice(chars) for _ in xrange(8))

  def get(self):
    code_list = []
    for i in range(20000):
      new_code = self.GenerateCode()
      promotion_code = PromotionCode(code=new_code)
      code_list.append(promotion_code)
    db.put(code_list)
    self.response.out.write("populating datastore...<br>")
    self.response.out.write("done")