Я использовал слегка измененное решение от this thread, чтобы получить набор случайно выбранных предметов из хранилища данных. Я использую ProtoRPC, хотя это не имеет большого значения, просто для вашей информации. Мой код выглядит так:Как получить набор уникальных случайных записей из хранилища данных
@remote.method(RandomImagesRequest, RandomImagesResponse)
def get_random_images(self, request):
images = []
count = request.count
for i in range(0, count):
random_number = random.random()
img = Image.all().order('random_number').filter('random_number>=', random_number).get()
if img is None:
img = Image.all().order('-random_number').filter('random_number <', random_number).get()
image_message = ImageMessage(image_url=img.image_url)
images.append(image_message)
return RandomImagesResponse(images=images)
Таким образом, я получаю любое количество случайно выбранных предметов. Но иногда появляются дубликаты. Как эффективно получать только уникальные предметы из Datastore?
Этот метод будет работать для одного запроса, но вы обрекаете группы элементов, которые часто выбираются вместе (при отсутствии новых записей в хранилище данных), что уменьшает случайность. –
Чтобы устранить это, переназначьте их случайные числа при их получении. –