Python 填充Google应用程序引擎应用程序';具有20.000个字符串的s数据存储
在appspot中尝试之前,我正在尝试在本地数据存储中创建并存储20000个随机代码。。。这就是模型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)
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")