1
請教我如何以正確的方式做到這一點,因爲我覺得我現在的做法很囉嗦。方便地對數據存儲實體進行迭代
我知道對App Engine中的所有實體進行迭代並不完全如何設計使用,但有時我想收集有關我的實體的統計信息,例如有多少用戶是女性。實際上,標準可能會更復雜一些,但無論如何都需要檢查每個實體。
這裏是我如何遍歷實體的一些pseudoish代碼:
def handle_count_female_users(cursor = None, counter = 0):
q = User.all()
if cursor:
q.with_cursor(cursor)
MAX_FETCH = 100
users = q.fetch(MAX_FETCH)
count_of_female_users = len(filter(lambda user:user.gender == 'female', users))
total_count = counter + count_of_female_users
if len(users) == MAX_FETCH:
Task(
url = "/count_female_users",
params = {
'counter' : str(total_count),
'cursor' : q.cursor()
}
).add()
else:
# Now finally have the result
logging.info("We have %s female users in total." % total_count)
我有路由代碼,自動映射GET /富由handle_foo處理,這東西我已經找到了方便。正如你所看到的,即使這樣,我也有很多支持循環的東西,幾乎與我實際想要完成的事情無關。
我真的想要做的是一樣的東西:
tally_entities(
entity_class = User,
filter_criteria = lambda user:user.gender == 'female',
result = lambda count:logging.info("We have %s female users in total" % count)
)
任何想法如何來接近這個理想,或者是有一些更好的方法?
真棒,已經完全忘記了MapReduce的。 – Bemmu 2012-02-16 21:25:29