我知道这很简单,但是我无法弄清楚,我正在获取给定链接名的所有实例,但是我想调用它们的所有值(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。慢速的任何来源都可能在其他地方。

09-16 03:40