1

このスレッドからわずかに変更されたソリューションを使用して、データストアからランダムに選択されたアイテムのセットを取得しました。私は 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)

このようにして、ランダムに選択されたアイテムをいくつでも取得できます。しかし、時々重複が表示されます。データストアから一意のアイテムのみを効果的に取得するにはどうすればよいですか?

4

2 に答える 2

0

追加する前に、エンティティのキ​​ーが画像リストにないことを確認し、存在する場合は再クエリすることができます。データベースに少なくともcountアイテムがあることを確認してください。そうしないと、無限ループになります。

于 2011-05-12T20:11:16.293 に答える
0

N 個のアイテムを個別にフェッチする代わりにrandom_number、新しい random_number 以上の 3 つのアイテムをフェッチするだけです。

欠点は、時折 0 ~ 2 個のアイテムを取得することです。この場合、絶対に 3 個のアイテムが必要な場合は、別の乱数を使用して残りを再取得できます (または >= を < に切り替えます)。

于 2011-05-12T17:06:11.860 に答える