我使用了一個從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獲取唯一的項目?
該方法適用於一個查詢,但是您經常一起選擇一組項目(假設沒有對數據存儲的新寫入),從而降低了隨機性。 – 2011-05-12 20:10:03
爲了解決這個問題,當你提取它們時,重新分配它們的隨機數。 – 2011-05-12 20:45:48