我知道这很简单,但是我无法弄清楚,我正在获取给定链接名的所有实例,但是我想调用它们的所有值(rating2)进行计算,尽管我在循环中意识到,但我相信每次都发出一个单独的呼叫,(速度很慢)仅需要100秒的LinkRating2类实例需要2秒。那么,如何在给定链接名的情况下不循环调用所有的rating2值并填充字典呢?还是坦率地说,使此代码更快?
class LinkRating2(db.Model):
user = db.StringProperty()
link = db.StringProperty()
rating2 = db.FloatProperty()
def sim_distance(link1,link2,tabl):
# Get the list of shared_items
si={}
query = tabl.all()
query2 = tabl.all()
a = query.filter('link = ', link1)
b = query2.filter('link = ', link2)
adic ={}
bdic= {}
##populate dics
aa = a.fetch(10000)
bb = b.fetch(10000)
for itema in aa:
adic[itema.user]=itema.rating2
for itemb in bb:
bdic[itemb.user]=itemb.rating2
编辑:
好的,我调试并意识到循环实际上花费了0秒,我所有的时间都在查询和获取行中,我只有一个包含100个项目的表,并且花费了2秒!!!!从100张桌子中取出几件物品的速度如何这么慢?如何加快速度?
最佳答案
您的应用程序发出的呼叫数量超出了所需数量。当您执行.fetch()操作时,只会出现RPC。慢速的任何来源都可能在其他地方。