首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有多个嵌套函数的ndb.Tasklet和SyncTasklet

具有多个嵌套函数的ndb.Tasklet和SyncTasklet
EN

Stack Overflow用户
提问于 2013-01-26 01:20:30
回答 1查看 401关注 0票数 3

我正在尝试高效地调用tasklet和子tasklet:

代码语言:javascript
复制
@ndb.tasklet
def getBeds(bed_key):
    bed = yield bed_key.get_asyn()
    bed_info = {}
    ......
    raise ndb.Return(bed_info)

@ndb.tasklet
def getRoom(room_key):
    room = yield room_key.get_async()
    room_info = {}
    ..........
    beds_in_room = map(getBeds,room.beds)
    room_info["beds"] = beds_in_room
    raise ndb.Return(room_info)

@ndb.tasklet
def getBuilding(build_key):
    build = yield build_key.get_async()
    build_info = {}
    ...........
    rooms_in_build = map(getRoom,build.rooms)
    build_info["rooms"] = rooms_in_build

@ndb.toplevel
def getHotel(hotel_obj)
    hotel_inf = {}
    .........
    buildings_in_hotel = map(getBuilding,hotel_obj.buildings)
    hotel_inf["buildings"] = buildings_in_hotel
    return hotel_inf

出于某种原因,我认为@ndb.toplevel会暂停getHotel,直到一切都完成。不幸的是,buildings_in_hotel返回了一个期货列表...

我如何让它完成?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-26 05:12:45

你投降了!

当调用一个微线程时,你总是得到一个未来,然后让步来获得结果。还有一个并行的输出,你可以产生一个微线程的元组或列表(有时被称为屏障)。

代码语言:javascript
复制
beds_in_room = yield map(getBeds,room.beds)

代码语言:javascript
复制
rooms_in_build = yield map(getRoom,build.rooms)

代码语言:javascript
复制
buildings_in_hotel = yield map(getBuilding,hotel_obj.buildings)
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14527035

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档