Итерации и memcache для выбранной категории случайных элементов


Следующий код-это быстрая реализация, так как мне необходимо только 3 случайных изображений, отсортированных по категориям (случайные изображения глаза, случайные изображения нос и рот случайный образ, а затем объединить их):

    fileinfos = FileInfo.all().filter("category =", "eyes")
    fileinfo = fileinfos[random.randint(0, fileinfos.count()-1)] 
    url = images.get_serving_url(str(fileinfo.blob.key()), size=420)
    fileinfos = FileInfo.all().filter("category =", "nose")
    fileinfo2 = fileinfos[random.randint(0, fileinfos.count()-1)] 
    url2 = images.get_serving_url(str(fileinfo2.blob.key()), size=420)
    fileinfos = FileInfo.all().filter("category =", "mouth")
    fileinfo3 = fileinfos[random.randint(0, fileinfos.count()-1)] 
    url3 = images.get_serving_url(str(fileinfo3.blob.key()), size=420)

Данном случае является несколько специфическим, поскольку количество отбора фиксируются в 3. Конечно, итерации или функция для этого предпочтительнее и с memcache также увеличить время на ответ, так как нет многих файлов и тот же файл не выбирали иногда и тогда я хочу использовать memcache Для и, кажется, с memcache может кэшировать результаты get_serving_url , чтобы я мог кэш fileinfos или результаты get_serving_url. Я знаю, что с memcache ограничен в памяти.

    def get_memcached_serving_url(fileinfo):
        from google.appengine.api import memcache
        memcache_key = "blob_%d" % fileinfo.blob.key()
        data = memcache.get(memcache_key)
        if data is not None:
            return data

И я думаю, что я не могу кэш самого объекта и только в результате get_serving_url во время его поездки в хранилище, что, мол, требуется время.

Скажите, пожалуйста, какие-либо мысли или мнение об этом быстрое прототипирование, как получить случайные элементы, надеясь для кэширования элементов с числом элементов до сих пор не очень большие (<100 элементов и, если же выбран дважды, то я бы хотела быстро и, желательно кэшированный ответ)

Если вы хотите, вы можете взглянуть на фактическое применение здесь.



Комментарии
1 ответ

Что касается изображения кэширования, это кажется соответствующим.

Во-вторых, сухой этот код, это сделает ваш код более легким в обслуживании:

fileinfos = FileInfo.all().filter("category =", "eyes")
fileinfo = fileinfos[random.randint(0, fileinfos.count()-1)]
url = images.get_serving_url(str(fileinfo.blob.key()), size=420)

Должен иметь собственную функцию это (простите мою пы):

def get_random_image_url(category)
fileinfos = FileInfo.all().filter("category =", category)
fileinfo = fileinfos[random.randint(0, fileinfos.count()-1)]
return images.get_serving_url(str(fileinfo.blob.key()), size=420)

eyes_url = get_random_image_url("eyes")
nose_url = get_random_image_url("nose")
mouth_url = get_random_image_url("mouth")

2
ответ дан 2 сентября 2011 в 01:09 Источник Поделиться