我正在尝试高效地调用tasklet和子tasklet:
@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返回了一个期货列表...
我如何让它完成?
发布于 2013-01-26 05:12:45
你投降了!
当调用一个微线程时,你总是得到一个未来,然后让步来获得结果。还有一个并行的输出,你可以产生一个微线程的元组或列表(有时被称为屏障)。
beds_in_room = yield map(getBeds,room.beds)和
rooms_in_build = yield map(getRoom,build.rooms)和
buildings_in_hotel = yield map(getBuilding,hotel_obj.buildings)https://stackoverflow.com/questions/14527035
复制相似问题